直接上代码:
/* 在 OEMIdle() 函数中 OEM 根据 (int)(dwRescheduleTime – CurMSec) 计算值判断是否让 CPU 进入 idle 状态,因此我们可以利用此函数来计算 CPU 的 loading. 根据 MSDN ,可以写个应用程序,每 100ms 去计算一次 idle 的时间, 10 次评价后,在UI上更新,以下是一个被 Timer 循环调用的函数。建议将此函数写成的一个线程。 */ void CSystemInfoDlg::GetCpuStatus(CString &csInfo) { #define IDLE_COUNT 10 DWORD dwStartTick = 0; DWORD dwIdleStart = 0; DWORD dwStopTick = 0; DWORD dwIdleEnd = 0; int iPresentIdle = 0; int iCpuUage[IDLE_COUNT] = {0}; int iCount = 0; int iAverage = 0; static int iPreAverage = 0; DWORD dwSum = 0; int i = 0; while(iCount < IDLE_COUNT) { dwStartTick = GetTickCount(); dwIdleStart = GetIdleTime(); Sleep(100); dwStopTick = GetTickCount(); dwIdleEnd = GetIdleTime(); iPresentIdle = (100 * (dwIdleEnd - dwIdleStart)) / (dwStopTick - dwStartTick); iCpuUage[iCount] = iPresentIdle; iCount++; //10 times count if(IDLE_COUNT == iCount) { for(i = 0;i < IDLE_COUNT;i++) { dwSum += iCpuUage[i]; } iAverage = dwSum / IDLE_COUNT; if(iPreAverage != iAverage) { iPreAverage = iAverage; } RETAILMSG(1,(TEXT("CPU used is:%d%%\r\n"),100 - iAverage)); csInfo.Format(L"CPU used is:%d%%.",100 - iAverage); break; } } }