Code:
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();
LogMessage("Got to This Point1", "", "", "", "");
if( ! GetProcessTimes( hHandle, &ftCreate, &ftExit, &ftUser, &ftKernel ) )
{
printf("error old getprocesstime %d", GetLastError() );
getch();
}
LogMessage("Got to This Point2", "", "", "", "");
lOldUser = iFunGetTime( ftUser );
lOldKernel = iFunGetTime( ftKernel );
LogMessage("Got to This Point3", "", "", "", "");
Sleep( 1000 );
LogMessage("Got to This Point4", "", "", "", "");
dwNewTime = timeGetTime();
if( ! GetProcessTimes( hHandle, &ftCreate, &ftExit, &ftUser, &ftKernel ) )
{
printf("error new getprocesstime %d", GetLastError() );
getch();
}
LogMessage("Got to This Point5", "", "", "", "");
lNewUser = iFunGetTime( ftUser );
lNewKernel = iFunGetTime( ftKernel );
LogMessage("Got to This Point7", "", "", "", "");
lKernel = lNewKernel - lOldKernel;
lUser = lNewUser - lOldUser;
LogMessage("Got to This Point8", "", "", "", "");
dwTime = dwNewTime-dwOldTime;
LogMessage("Got to This Point9", "", "", "", "");
if( dwTime == 0 )
{
Sleep( 100 );
dwNewTime = timeGetTime();
dwTime = dwNewTime-dwOldTime;
}
LogMessage("Got to This Point10", "", "", "", "");
iProcUsage = (((lKernel+lUser)*100 ) / (Number_of_Processes * dwTime) );
LogMessage("Got to This Point11", "", "", "", "");
return iProcUsage;
}