使用的是psapi.h中的GetProcessMemoryInfo函数,但是运行到该函数时就强制退出了。

后来,百度到原因是 原来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 -;
} if(GetProcessMemoryInfo(process,&pmc,sizeof(pmc))){
if(mem){
*mem = pmc.WorkingSetSize;
}
if(vmem){
*vmem = pmc.PagefileUsage;
}
return ;
} return -;
}

自己解决的。
使用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[];
//将DWORD类型转换为10进制的char*类型
_ultoa(pid,pidChar,); //调用外部命令
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) != -){
//匹配成功
usedMem = rx.cap();
}
//截取K前面的字符串,转换为数字,供换算单位使用。
usedMem = usedMem.left(usedMem.length() - );
//换算为MB的单位
return QString::number(usedMem.toDouble() / ) + " MB";
}

使用的时候,getUsedMemory(GetCurrentProcessId());
GetCurrentProcessId()是windows的api。

http://www.qter.org/forum.php?mod=viewthread&tid=2805&extra=page%3D1

Qt使用windows API获取程序运行时占用内存 good的更多相关文章

  1. C# 获取程序运行时路径

    Ø  前言 开发中,很多时候都需要获取程序运行时路径,比如:反射.文件操作等..NET Framework 已经封装了这些功能,可以很方便的使用. C# 中有很多类都可以获取程序运行时路径,我们没必要 ...

  2. 计算apk包的安装之后占用空间以及运行时占用内存

    1.统计结果如下 计算apk安装占用空间大小方式 为了方式apk包运行时出现缓存数据等对空间计算造成影响.应该先进行安装,然后分别计算空间变化 所有apk包安装完毕后再运行 开启两个cmd窗口 第一个 ...

  3. c++程序运行时的内存分配《转》

    C++中,内存分为5个区:堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈:是由编译器在需要时自动分配,不需要时自动清除的变量存储区.通常存放局部变量.函数参数等. 2.堆:是由new分配的 ...

  4. 实例分析C程序运行时的内存结构

      先验知识 静态变量存储在静态存储区,局部变量存储在动态存储区(栈),代码存放在代码区 寄存器,EBP指向栈底,ESP指向栈顶,EIP指向正在执行指令的下一条指令,三个寄存器中保存的都是地址,32位 ...

  5. C程序运行时的内存分布

    该篇博客是自己学习的总结,如果有哪里理解的不对的地方,希望大家可以指点. 一.C内存空间分布图 二.各内存区域详解 1.代码区(.text): 该区域主要存放二进制可执行文件. 2.数据区(.data ...

  6. [Java]程序运行时的内存分配

    本文出处:<Thinking in JAVA> 寄存器这是最快的存储区,因为它位于不同于其他存储区的地方--处理器内部.但是寄存器的数量极其有限,所以寄存器根据需求进行分配.你不能直接控制 ...

  7. c++ 程序编译后运行时的内存分配

    程序编译后运行时的内存分配 太好的文章了,看到不得不转,转自:http://blog.sina.com.cn/s/blog_5420e0000101a0w1.html 一.编译时与运行时的内存情况 1 ...

  8. .NET Core 获取程序运行环境信息与反射的应用

    目录 RuntimeInformation.Environment 获取信息 反射获取信息 获取某个属性的值以及别名 反射获取信息 使用 总结 笔者的九篇反射系统文章已经完结,但是笔者会持续更新反射在 ...

  9. C/C++ Windows API——获取系统指定目录(转)

    原文地址:C/C++ Windows API——获取系统指定目录 经测试,在win10 VS2017中用wprintf()输出正常,SHGetSpecialFolderPath函数也正常运行 但是用M ...

随机推荐

  1. linux 时间同步ntp

    配置前准备:关闭防火墙,配置好hosts,ssh免密登录 1.选定同步的标准,我是以hadoop002(设置为当前时间)作为同步标准,hadoop003(时间是2018年3月21,使用date -s进 ...

  2. 【Cocos2d-x Lua】数据库封装类型的操作

    Lua数据库封装类型的操作 使用演示样例 lua代码: require("DB") -- 保存一个字符串(数据库中存储的数据都是以字符串的形式保存的) DB:getInstance ...

  3. Java native代码编译步骤简书

    Java native代码编译步骤简书 目的:防止java代码反编译获取密码算法 (1)编写实现类com.godlet.PasswordAuth.java (2)编译java代码javac Passw ...

  4. Matlab Tricks(二十四)—— title 置于图像之下(包括 subplots 的情形)

    1. 使用 title 的 'position' 属性进行设置 plot(1:10, 1:10), title('y=x', 'position', [5.5, 0]) 2. 使用 xlabel pl ...

  5. jquery 源码学习(四)构造jQuery对象-工具函数

    jQuery源码分析-03构造jQuery对象-工具函数,需要的朋友可以参考下.   作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com 声明:本文为原 ...

  6. jsonkit 分解nsarray 时刻 一个错误

    jsonkit 分解nsarray 时刻 一个错误 Assertion failure in -[TXJKArray count], /Users/mqq/hudson/1740/src/Tencen ...

  7. spring-boot-quartz, 依赖spring-boot-parent good

    /** * state的值代表该任务触发器的状态: STATE_BLOCKED 4 // 运行 STATE_COMPLETE 2 //完成那一刻,不过一般不用这个判断Job状态 STATE_ERROR ...

  8. sqlplus登录信息,列出所有表,列在表结构,sqlplus行和列显示设置,别名,Null值问题,细木工,DISTINCT

     1 sqlplus登录方式: 普通用户登录: 登录eg:C:\>sqlplusscott/11  (格式:sqlplus username/password) 退出eg:quit退出 超级 ...

  9. HDOJ 5090 Game with Pearls 二分图匹配

    简单的二分图匹配: 每个位置可以边到这些数字甚至可以边 Game with Pearls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: ...

  10. GDI+与WPF中的颜色简析

    原文:GDI+与WPF中的颜色简析 --------------------------------------------------------------------------------引用 ...