Hello,
I'm writing a function to find the CPU Usage, simiar to the one shown in Task Manager. The following is what I have so far. The values seem reasonable for low numbers, but when I see it at about 30-40% on Task Manager, this function shows it up to 70-80%. I would like to know if anyone has any suggestions regarding my code.
Thanks!!
Code:
int iFunGetTime( FILETIME ftTime )
{
SYSTEMTIME stTime;
int iTime;
FileTimeToSystemTime( &ftTime, &stTime );
iTime = stTime.wSecond * 1000;
iTime += stTime.wMilliseconds;
return iTime;
}
int iFunGetCpuProcUsage( HANDLE hHandle )
{
LONG lOldIdle, lOldUser, lNewUser, lOldKernel, lNewKernel, lNewIdle, lProcUsage, lUser, lKernel, lIdle, lSys;
DWORD dwOldTime, dwNewTime, dwTime;
FILETIME idleTime, kernelTime, userTime, ftCreate, ftExit, ftUser, ftKernel;
int iProcUsage;
dwOldTime = timeGetTime();
if( ! GetProcessTimes( hHandle, &ftCreate, &ftExit, &ftUser, &ftKernel ) )
{
printf("error old getprocesstime %d", GetLastError() );
getch();
}
lOldUser = iFunGetTime( ftUser );
lOldKernel = iFunGetTime( ftKernel );
Sleep( 1000 );
dwNewTime = timeGetTime();
if( ! GetProcessTimes( hHandle, &ftCreate, &ftExit, &ftUser, &ftKernel ) )
{
printf("error new getprocesstime %d", GetLastError() );
getch();
}
lNewUser = iFunGetTime( ftUser );
lNewKernel = iFunGetTime( ftKernel );
lKernel = lNewKernel - lOldKernel;
lUser = lNewUser - lOldUser;
dwTime = dwNewTime-dwOldTime;
if( dwTime == 0 )
{
Sleep( 100 );
dwNewTime = timeGetTime();
dwTime = dwNewTime-dwOldTime;
}
iProcUsage = (((lKernel+lUser)*100 ) / dwTime );
return iProcUsage;
}