程序媛媛1987 2020-07-03 16:29 采纳率: 0%
浏览 772

windows利用系统api获取的系统的cpu利用率为什么和任务管理器的不一致?

windows利用系统api获取的系统的cpiweiu利用率为什么和任务管理器的不一致。
具体代码如下,我的电脑T480S,64位系统,运行的结果比任务管理器的第不少,大概低10%-25%

#include
#include
static bool getSystemCPUTime(ULONGLONG& totalTime, ULONGLONG& idleTime)
{
FILETIME ftSysIdle, ftSysKernel, ftSysUser;

if (!GetSystemTimes(&ftSysIdle, &ftSysKernel, &ftSysUser))
{
    return false;
}

ULARGE_INTEGER sysKernel, sysUser, sysIdle;
sysKernel.HighPart = ftSysKernel.dwHighDateTime;
sysKernel.LowPart = ftSysKernel.dwLowDateTime;
sysUser.HighPart = ftSysUser.dwHighDateTime;
sysUser.LowPart = ftSysUser.dwLowDateTime;
sysIdle.HighPart = ftSysIdle.dwHighDateTime;
sysIdle.LowPart = ftSysIdle.dwLowDateTime;

totalTime = sysKernel.QuadPart + sysUser.QuadPart;
idleTime = sysIdle.QuadPart;

return true;

}
int main()
{
unsigned int interval = 1000;
ULONGLONG totalPrev = 0, totalCurr = 0;
ULONGLONG idlePrev = 0, idleCurr = 0;
unsigned int totalCPUUsage = 0;

getSystemCPUTime(totalPrev, idlePrev);

while (true)
{

    Sleep(1000);

    if (getSystemCPUTime(totalCurr, idleCurr))
    {
        LONGLONG total = totalCurr - totalPrev;

        if (total > 0)
        {
            LONGLONG idle = idleCurr - idlePrev;
            totalCPUUsage = static_cast<unsigned int>(100 * (total - idle) / (total));
            std::cout << "cpu usage is " << totalCPUUsage << std::endl;
        }
    }

    totalPrev = totalCurr;
    idlePrev = idleCurr;
}

}

  • 写回答

1条回答 默认 最新

  • marty535 2020-07-03 16:37
    关注

    在windows中要看真实的进程占用cpu,内存等情况还是要以资源监视器为主,别看任务管理器了,例如redis,redis-server在windows的任务管理器中几乎
    不怎么占内存,与实际情况完全背离,但是如果你去看资源监视器,就能看到他工作集的正常内存占用

    评论

报告相同问题?

悬赏问题

  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭