Qt5内存轮询

时间:2018-04-09 18:47:14

标签: c++ windows mfc qt5

我是新来的,所以如果我在错误的地方张贴或在我的问题中遗漏了一些信息,我会道歉。 是否可以使用Qt5在Windows中轮询全局内存使用情况?我已经通过Qt5 Classes进行了搜索,但我没有找到任何我认为符合条件的内容。为了更具体,我正在寻找与GlobalMemoryStatusEx类似的东西。

1 个答案:

答案 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时不要包含这些标头)。