블로그 이미지
smstock

카테고리

분류 전체보기 (54)
취미 (8)
공부 (32)
낙서장 (12)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항

태그목록

최근에 올라온 글

현재 사용되는 프로세스의 CPU 점유율 계산법

double XfGetTime(void)
{
   LARGE_INTEGER liEndCounter,liFrequency ;
   QueryPerformanceCounter(&liEndCounter);
   QueryPerformanceFrequency(&liFrequency);

   return (liEndCounter.QuadPart / (double)liFrequency.QuadPart) * 1000;
}

bool GetCpuShare(double &dShare)
{
   static double oldTime = XfGetTime();     //start 상태의 가장 마지막 값을 저장한다.
   static __int64 iOldKernelTime=0, iOldUserTime=0;

   LARGE_INTEGER  iCreationTime, iExitTime, iKernelTime, iUserTime;

   bool ret = false;

   if( GetProcessTimes( GetCurrentProcess() , (LPFILETIME) &iCreationTime, (LPFILETIME) &iExitTime
      , (LPFILETIME) &iKernelTime, (LPFILETIME) &iUserTime ) == TRUE )
   {
      if( iOldKernelTime > 0)
      {
         __int64 sum = iKernelTime.QuadPart - iOldKernelTime + iUserTime.QuadPart - iOldUserTime;
         sum /= 10000; // 100 nano sec 단위에서 msec 단위로 변환

         if( XfGetTime()  - oldTime > 0)
         {
            dShare = sum / (XfGetTime()-oldTime) * 100.0  ;
            ret = true;
         }
      }

      iOldKernelTime = iKernelTime.QuadPart;
      iOldUserTime = iUserTime.QuadPart;
      oldTime = XfGetTime();
   }

   return ret;
}



인터넷에서 찾다보니 위와 같은 함수가 있어서 사용했는데 이상한 결과가 나오는 걸 확인했다


최종 값에 아래의 값을 가져와서 나누면 제대로된 결과가 나오는 거 같다.

(Processor 갯수만큼 나눠서 사용한다는 소리)




SYSTEM_INFO Info;

GetSystemInfo(&Info);


dShare /= Info.dwNumberOfProcessors;





참조 : http://ictlab.tistory.com/24

Posted by smstock
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함