我是新来的,所以如果我在错误的地方张贴或在我的问题中遗漏了一些信息,我会道歉。 是否可以使用Qt5在Windows中轮询全局内存使用情况?我已经通过Qt5 Classes进行了搜索,但我没有找到任何我认为符合条件的内容。为了更具体,我正在寻找与GlobalMemoryStatusEx类似的东西。
答案 0 :(得分:0)
Qt并没有提供可移植的API,因为查询操作系统的内存使用情况确实是操作系统特定的任务。
但是,您可以编写包装器类,该类根据您运行的操作系统使用正确的API。
例如,在Windows上,您可以使用已经提到过的API( GlobalMemoryStatusEx ),而在Linux上则可以使用sysinfo API。
一旦确定了用于目标平台的API,就可以使用条件编译仅为每个平台编译正确的代码,同时为外界提供相同的界面。
Qt提供了一些根据目标操作系统设置或不设置的定义( Q_OS _ )。有关详细信息,请查看文档here。
示例:
/*!
* \brief MemoryUsage::getMemoryUsage
* \return the overall memory usage in percent.
*/
int MemoryUsage::getMemoryUsage()
{
int result = 0;
#ifdef Q_OS_LINUX
struct sysinfo sys_info;
sysinfo(&sys_info);
unsigned long long total = sys_info.totalram *(unsigned long long)sys_info.mem_unit / 1024;
unsigned long long free = sys_info.freeram *(unsigned long long)sys_info.mem_unit/ 1024;
result = (total - free) * 100 / total;
#endif
#ifdef Q_OS_WIN
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx (&statex);
result = statex.dwMemoryLoad);
#endif
return result;
}
使用相同的技巧,您还必须确保包含正确的标头(例如,在编译Linux时不要包含这些标头)。