Advertisement
KindDragon

HRTimer

Sep 1st, 2011
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. class HRTimer {
  2. public:
  3.     HRTimer();
  4.     void Start() ;
  5.     void Stop();
  6.     void Reset();
  7.     double GetTotalMS();
  8.  
  9. private:
  10.     DWORD processor;
  11.     DWORD_PTR affinityMask;
  12.     LARGE_INTEGER start;
  13.     LARGE_INTEGER stop;
  14.     LARGE_INTEGER total;
  15.     double msMultiplier;
  16. };
  17.  
  18. HRTimer::HRTimer()
  19.     : start(), stop(), total(), processor(0), affinityMask(0)
  20. {
  21.     LARGE_INTEGER proc_freq;
  22.     processor = ::GetCurrentProcessorNumber();
  23.     affinityMask = ::SetThreadAffinityMask(::GetCurrentThread(), 1 << processor);
  24.     ::QueryPerformanceFrequency(&proc_freq);
  25.     ::SetThreadAffinityMask(::GetCurrentThread(), MAXSSIZE_T);
  26.     msMultiplier =  1.0 / (proc_freq.QuadPart / 1000.0);
  27. }
  28.  
  29. void HRTimer::Start(void)
  30. {
  31.     affinityMask = ::SetThreadAffinityMask(::GetCurrentThread(), 1 << processor);
  32.     ::QueryPerformanceCounter(&start); 
  33.     ::SetThreadAffinityMask(::GetCurrentThread(), MAXSSIZE_T);
  34. }
  35.  
  36. void HRTimer::Stop(void)
  37. {
  38.     ::SetThreadAffinityMask(::GetCurrentThread(), 1 << processor);
  39.     ::QueryPerformanceCounter(&stop);
  40.     ::SetThreadAffinityMask(::GetCurrentThread(), affinityMask);
  41.     total.QuadPart += (stop.QuadPart - start.QuadPart);
  42. }
  43.  
  44. void HRTimer::Reset(void)
  45. {
  46.     total.QuadPart = 0;
  47. }
  48.  
  49. double HRTimer::GetTotalMS(void)
  50. {
  51.     return (stop.QuadPart - start.QuadPart) * msMultiplier;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement