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;
}
}