/* percent = (user_time_diff + kernel_time_diff) * 100 / (cpu_num * system_time_diff) */
#include<windows.h>
#include<stdio.h>
#include <pdh.h>
#include <Tlhelp32.h>
int main()
{
// Find the specified Process
HANDLE hProcess = NULL;
PROCESSENTRY32 pe = {sizeof(pe)};
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
BOOL suc = Process32First(hSnapShot, &pe);
while(suc)
{
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, false, pe.th32ProcessID);
if(hProcess != NULL)
{
if(strcmp(pe.szExeFile, "cpu_test.exe") == 0)
{
break;
}
}
CloseHandle(hProcess);
suc = Process32Next(hSnapShot, &pe);
}
// Got it
if(suc)
{
ULARGE_INTEGER ulLastSysTime, ulCurSysTime;
ULARGE_INTEGER ulStart, ulEnd,
ulLastProcKernelTime, ulLastProcUserTime,
ulCurProcKernelTime, ulCurProcUserTime;
ULARGE_INTEGER ulKernelTimeUsed ,ulUserTimeUsed, ulSysTimePast;
SYSTEM_INFO si = {0};
int iCpuUsage = 0;
GetSystemInfo(&si);
GetSystemTimeAsFileTime((PFILETIME)&ulLastSysTime);
GetProcessTimes(hProcess, (PFILETIME)&ulStart, (PFILETIME)&ulEnd,
(PFILETIME)&ulLastProcKernelTime, (PFILETIME)&ulLastProcUserTime);
while(1)
{
Sleep(1000);
GetProcessTimes(hProcess, (PFILETIME)&ulStart, (PFILETIME)&ulEnd,
(PFILETIME)&ulCurProcKernelTime, (PFILETIME)&ulCurProcUserTime);
GetSystemTimeAsFileTime((PFILETIME)&ulCurSysTime);
ulKernelTimeUsed.QuadPart = ulCurProcKernelTime.QuadPart - ulLastProcKernelTime.QuadPart;
ulUserTimeUsed.QuadPart = ulCurProcUserTime.QuadPart - ulLastProcUserTime.QuadPart;
ulSysTimePast.QuadPart = ulCurSysTime.QuadPart - ulLastSysTime.QuadPart;
iCpuUsage = (
(ulKernelTimeUsed.QuadPart + ulUserTimeUsed.QuadPart)*100 /
(float)(si.dwNumberOfProcessors*ulSysTimePast.QuadPart)) + 0.5f
;
printf("\rThe Process use %3d%%", iCpuUsage);
ulLastSysTime = ulCurSysTime;
ulLastProcKernelTime = ulCurProcKernelTime;
ulLastProcUserTime = ulCurProcUserTime;
}
}
return 0;
}