Qt使用windows API获取程序运行时占用内存 good
2017-02-09 17:16
686 查看
使用的是psapi.h中的GetProcessMemoryInfo函数,但是运行到该函数时就强制退出了。
后来,百度到原因是 原来Qt编译时加了-mthread,createprocess时要使的Handle能够线程继承
有没有做过类似的的?或者其他方式实现的?
自己解决的。
使用windows的api。
贴出代码,分享。
#include <windows.h>
使用的时候,getUsedMemory(GetCurrentProcessId());
GetCurrentProcessId()是windows的api。
http://www.qter.org/forum.php?mod=viewthread&tid=2805&extra=page%3D1
后来,百度到原因是 原来Qt编译时加了-mthread,createprocess时要使的Handle能够线程继承
有没有做过类似的的?或者其他方式实现的?
int PainterArea::getUsedMemory(uint64_t *mem, uint64_t *vmem) { PROCESS_MEMORY_COUNTERS pmc; HANDLE process = NULL; //DWORD processID = GetProcessID(); //OpenProcessToken(GetCurrentProcess()) //qDebug()<<"processID"<<processID << GetCurrentProcessId(); process = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,false,GetCurrentProcessId()); if(process == NULL) { qDebug()<<"null"; return -1; } if(GetProcessMemoryInfo(process,&pmc,sizeof(pmc))){ if(mem){ *mem = pmc.WorkingSetSize; } if(vmem){ *vmem = pmc.PagefileUsage; } return 0; } return -1; }
自己解决的。
使用windows的api。
贴出代码,分享。
#include <windows.h>
/** * @author yuliuchuan * @date 2015-04-10 * 查询程序占用内存。 * 思路:通过调用外部命令'tasklist /FI "PID EQ pid"'。 * 将返回的字符串首先替换掉',', * 然后用正则表达式匹配已KB为单位表示内存的字符串, * 最后换算为MB为单位返回。 */ QString PainterArea::getUsedMemory(DWORD pid) { char pidChar[25]; //将DWORD类型转换为10进制的char*类型 _ultoa(pid,pidChar,10); //调用外部命令 QProcess p; p.start("tasklist /FI \"PID EQ " + QString(pidChar) + " \""); p.waitForFinished(); //得到返回结果 QString result = QString::fromLocal8Bit(p.readAllStandardOutput()); //关闭外部命令 p.close(); //替换掉"," result = result.replace(",",""); //匹配 '数字+空格+K'部分。 QRegExp rx("(\\d+)(\\s)(K)"); //初始化结果 QString usedMem(""); if(rx.indexIn(result) != -1){ //匹配成功 usedMem = rx.cap(0); } //截取K前面的字符串,转换为数字,供换算单位使用。 usedMem = usedMem.left(usedMem.length() - 1); //换算为MB的单位 return QString::number(usedMem.toDouble() / 1024) + " MB"; }
使用的时候,getUsedMemory(GetCurrentProcessId());
GetCurrentProcessId()是windows的api。
http://www.qter.org/forum.php?mod=viewthread&tid=2805&extra=page%3D1
相关文章推荐
- 使用CLR Profiler查看C#运行程序的内存占用情况
- vc下获取程序的运行时间和占用内存
- 使用Windows API实现运行时动态获取程序文件版本信息
- Windows XP 下使用命令行编译、运行 QT4 程序
- 今天就教大家查看手机的内存使用情况,可以帮你查看自己的程序占用了多大的内存(图文说明)
- c++test使用qt中的 mingw 创建pthread_create程序无法运行的问题
- 使用程序获取整型数据和浮点型数据在内存中的表示---gyy整理
- 程序运行时内存的使用
- VS2005下使用QT如无打VS2005的SP1补丁会导致QT程序无法运行
- X86 32位机器程序运行中多字节数据内存使用
- 获取更多的程序运行内存
- 使用QT在windows下高精度测试程序运行时间
- BAT脚本查看相应程序运行时内存使用
- [导入]使用WorkingSet减少.net程序内存占用
- linux c程序获取cpu使用率及内存使用情况
- linux c程序获取cpu使用率及内存使用情况
- linux c程序获取cpu使用率及内存使用情况
- 使用WorkingSet减少.net程序内存占用 转
- 如何配置来增加eclipse下运行java程序的jvm使用内存
- Linux下评估程序运行时间及内存占用情况的简便方法