__int64 CompareFileTime(FILETIME time1, FILETIME time2)
{
__int64 time1 = time1.dwHighDateTime << 32 | time1.dwLowDateTime ;
__int64 time2 = time2.dwHighDateTime << 32 | time2.dwLowDateTime ;
return (time2 - time1);
}
void MonitorCPUusageThread()
{
int nCPUPercentage = 0;
FILETIME idleTime;
FILETIME kernelTime;
FILETIME userTime;
FILETIME pre_idleTime;
FILETIME pre_kernelTime;
FILETIME pre_userTime;
bool res;
res = GetSystemTimes(&idleTime, &kernelTime, &userTime);
pre_idleTime = idleTime;
pre_kernelTime = kernelTime;
pre_userTime = userTime;
HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
int nLastRate = 0;
int nMaxRateCount = 0;
while (true)
{
WaitForSingleObject( hEvent,1000 );
res = GetSystemTimes(&idleTime, &kernelTime, &userTime );
__int64 idle = CompareFileTime(pre_idleTime, idleTime);
__int64 kernel = CompareFileTime(pre_kernelTime, kernelTime);
__int64 user = CompareFileTime(pre_userTime, userTime);
int cpu_occupancy_rate = (kernel + user - idle) * 100 / (kernel + user);
//(总的时间 - 空闲时间)/ 总的时间 = 占用CPU时间的比率,即占用率
int cpu_idle_rate = idle * 100 / (kernel + user);
//空闲时间 / 总的时间 = 闲置CPU时间的比率,即闲置率
int cpu_kernel_rate = kernel * 100 / (kernel + user);
//核心态时间 / 总的时间 = 核心态占用的比率
int cpu_user_rate = user * 100 / (kernel + user);
pre_idleTime = idleTime;
pre_kernelTime = kernelTime;
pre_userTime = userTime;
}
return 0;
}
如果要实时显示CPU占用率,MonitorCPUusageThread这个函数放到线程里面执行。