首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt5内存轮询

Qt5内存轮询
EN

Stack Overflow用户
提问于 2018-04-09 18:47:14
回答 1查看 152关注 0票数 1

我是新来的,所以我很抱歉,如果我张贴在错误的领域,或错过了一些信息,在我的问题。是否有可能使用Qt5?在windows中轮询全局内存使用情况,我在Qt5类中搜索过,但没有发现任何我认为合适的东西。为了获得更多的特异性,我正在寻找类似于GlobalMemoryStatusEx的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-14 16:12:37

Qt不提供可移植的API,因为查询操作系统是否使用内存确实是OS特有的任务。

但是,您可以编写一个包装器类,它根据运行的操作系统使用正确的API。

例如,在(GlobalMemoryStatusEx),上您可以使用您已经提到的API,而在系统信息上您可以使用系统信息 API)。

一旦确定了要用于目标平台的API,就可以使用条件编译为每个平台编译正确的代码,同时向外部提供相同的接口。

Qt提供了一些定义(、Q_OS_、),这些定义取决于目标操作系统的设置与否。有关更多细节,请查看文档这里

示例:

代码语言:javascript
复制
/*!
 * \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编译时不要包含)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49739690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档