Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.96 KB | None | 0 0
  1. /// Berserker: CPU utilization gage
  2. FILETIME    userTime_prev;
  3. int         totalTime_prev;
  4. void GLimp_GetCpuUtilization(unsigned *cpuUtil)
  5. {
  6.     int         util;
  7.     HANDLE      hProcess = GetCurrentProcess();
  8.     FILETIME    ft[4];
  9.     SYSTEMTIME  sdU;
  10.     FILETIME    dU, userTime;
  11.     int         dT, totalTime;
  12.     long long   usT, usT_prev, usT_delta, time, time2, time3;
  13.     float       deltaTime;
  14.  
  15.     if (!GetProcessTimes(hProcess, &ft[0], &ft[1], &ft[2], &ft[3]))
  16.     {
  17.         *cpuUtil = INT_MAX;
  18.         return;
  19.     }
  20.     totalTime = Sys_Milliseconds();
  21.  
  22.     time2 = ((long long)ft[2].dwHighDateTime << 32) + ft[2].dwLowDateTime;  // kernel time
  23.     time3 = ((long long)ft[3].dwHighDateTime << 32) + ft[3].dwLowDateTime;  // user time
  24.     time = time2 + time3;
  25.     userTime.dwHighDateTime = time >> 32;
  26.     userTime.dwLowDateTime = time & 0xFFFFFFFF;
  27.  
  28.     usT = time;
  29.     usT_prev = ((long long)userTime_prev.dwHighDateTime << 32) + userTime_prev.dwLowDateTime;
  30.     usT_delta = usT - usT_prev;
  31.     dU.dwHighDateTime = usT_delta >> 32;
  32.     dU.dwLowDateTime = usT_delta & 0xFFFFFFFF;
  33.  
  34.     FileTimeToSystemTime(&dU, &sdU);
  35.  
  36.     dT = totalTime - totalTime_prev;
  37.     deltaTime = sdU.wMilliseconds + sdU.wSecond * 1000.0 + sdU.wMinute * 60000.0 + sdU.wHour * 3600000.0 + (sdU.wDay - 1) * 86400000.0; /// дальше не будем раскручивать ;)
  38.     util = (int)(100.0 * deltaTime / (float)dT);
  39.  
  40.     if (util < 0)   util = 0;
  41.     else if (util > 100)    util = 100;
  42.  
  43.     userTime_prev = userTime;
  44.     totalTime_prev = totalTime;
  45.  
  46.     *cpuUtil = util;
  47. }
  48.  
  49. void GLimp_InitCPU(void)
  50. {
  51.     HANDLE      hProcess;
  52.     FILETIME    ft[4];
  53.     long long   time2, time3, time;
  54.  
  55.     hProcess = GetCurrentProcess();
  56.     GetProcessTimes(hProcess, &ft[0], &ft[1], &ft[2], &ft[3]);
  57.     totalTime_prev = Sys_Milliseconds();
  58.  
  59.     time2 = ((long long)ft[2].dwHighDateTime << 32) + ft[2].dwLowDateTime;  // kernel time
  60.     time3 = ((long long)ft[3].dwHighDateTime << 32) + ft[3].dwLowDateTime;  // user time
  61.     time = time2 + time3;
  62.     userTime_prev.dwHighDateTime = time >> 32;
  63.     userTime_prev.dwLowDateTime = time & 0xFFFFFFFF;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement