【问题标题】:Getting "Physical Memory currently used by current process" error in Qt在 Qt 中获取“当前进程当前使用的物理内存”错误
【发布时间】:2015-12-23 14:59:19
【问题描述】:

我正在 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

感谢您的帮助。

【问题讨论】:

  • 阅读错误信息,删除_EX即可。
  • 我的错误非常糟糕,感谢您的帮助 - 它有效。

标签: c++ qt memory


【解决方案1】:

根据文档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 也被填充。

【讨论】:

  • 这会不会与严格的别名规则冲突,即它是未定义的行为?
【解决方案2】:

我没有足够的声誉来发表评论。我从您的问题中获得的信息数量有限。我会尽力指导你在你的情况下我会做什么。

  1. 您是在使用 Qt 和 mingw32 还是 Visual Studio?

您提到的过程不适用于使用 mingw32 的 Qt。它适用于视觉工作室。

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

【讨论】:

  • 感谢您的回答。我正在使用微软编译器。 Xperience 博士的回答解决了我的问题。
猜你喜欢
  • 2011-11-05
  • 1970-01-01
  • 2010-12-02
  • 2021-12-16
  • 2015-10-17
  • 2011-02-06
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
相关资源
最近更新 更多