获取当前进程当前使用的物理内存" Qt中的错误

时间:2015-09-25 17:50:28

标签: c++ qt memory

我尝试在Qt 5.5中获取当前进程当前使用的物理内存"本教程:How to get system cpu/ram usage in c++ on Windows 当我尝试将此功能添加到我的应用程序时,我收到了错误...

PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)); // error C2664
SIZE_T physMemUsedByMe = pmc.WorkingSetSize;

错误:

C2664: 'BOOL K32GetProcessMemoryInfo(HANDLE,PPROCESS_MEMORY_COUNTERS,DWORD)' : cannot convert argument 2 from 'PROCESS_MEMORY_COUNTERS_EX *' to 'PPROCESS_MEMORY_COUNTERS'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

根据文档GetProcessMemoryInfo,您可以接受指向PROCESS_MEMORY_COUNTERSPROCESS_MEMORY_COUNTERS_EX的指针。最新类型包含一个附加字段。

它可能取决于SDK版本,但是在我的标题psapi.h中,此函数仅使用指向PROCESS_MEMORY_COUNTERS的指针声明。因此,扩展结构版本无法编译。

两种解决方案都有效:

// use only PROCESS_MEMORY_COUNTERS structure
PROCESS_MEMORY_COUNTERS pmc;

// or cast structure type
PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(),
    reinterpret_cast<PPROCESS_MEMORY_COUNTERS>(&pmc), sizeof(pmc));

Sinse GetProcessMemoryInfo也将结构大小作为参数,扩展结构PROCESS_MEMORY_COUNTERS_EX也被填充。

答案 1 :(得分:0)

我没有足够的声誉来发表评论。我提供的信息数量有限。我会尽力指导你在鞋子里做的事情。

  1. 您是否正在使用Qt与mingw32或visual studio?
  2. 您提到的过程不适用于使用mingw32的Qt。它适用于视觉工作室。

    1. 如果您正在使用Visual Studio,请尝试在没有Qt internvention的情况下遵循该方法,即为其编写独立程序。如果仍然出错,请检查MSDN上的函数原型