Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class HRTimer {
- public:
- HRTimer();
- void Start() ;
- void Stop();
- void Reset();
- double GetTotalMS();
- private:
- DWORD processor;
- DWORD_PTR affinityMask;
- LARGE_INTEGER start;
- LARGE_INTEGER stop;
- LARGE_INTEGER total;
- double msMultiplier;
- };
- HRTimer::HRTimer()
- : start(), stop(), total(), processor(0), affinityMask(0)
- {
- LARGE_INTEGER proc_freq;
- processor = ::GetCurrentProcessorNumber();
- affinityMask = ::SetThreadAffinityMask(::GetCurrentThread(), 1 << processor);
- ::QueryPerformanceFrequency(&proc_freq);
- ::SetThreadAffinityMask(::GetCurrentThread(), MAXSSIZE_T);
- msMultiplier = 1.0 / (proc_freq.QuadPart / 1000.0);
- }
- void HRTimer::Start(void)
- {
- affinityMask = ::SetThreadAffinityMask(::GetCurrentThread(), 1 << processor);
- ::QueryPerformanceCounter(&start);
- ::SetThreadAffinityMask(::GetCurrentThread(), MAXSSIZE_T);
- }
- void HRTimer::Stop(void)
- {
- ::SetThreadAffinityMask(::GetCurrentThread(), 1 << processor);
- ::QueryPerformanceCounter(&stop);
- ::SetThreadAffinityMask(::GetCurrentThread(), affinityMask);
- total.QuadPart += (stop.QuadPart - start.QuadPart);
- }
- void HRTimer::Reset(void)
- {
- total.QuadPart = 0;
- }
- double HRTimer::GetTotalMS(void)
- {
- return (stop.QuadPart - start.QuadPart) * msMultiplier;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement