class HRTimer {
public:
HRTimer(void)
double getFrequency(void);
void startTimer(void) ;
double stopTimer(void);
private:
LARGE_INTEGER start;
LARGE_INTEGER stop;
double frequency;
//..
}
HRTimer::HRTimer(void) : frequency(1.0 / this->getFrequency()) { }
double HRTimer::GetFrequency(void)
{
LARGE_INTEGER proc_freq;
if (!::QueryPerformanceFrequency(&proc_freq)) throw Exception(TEXT("QueryPerformanceFrequency() failed"));
return proc_freq.QuadPart;
}
void HRTimer::StartTimer(void)
{
DWORD_PTR oldmask = ::SetThreadAffinityMask(::GetCurrentThread(), 0);
::QueryPerformanceCounter(&start);
::SetThreadAffinityMask(::GetCurrentThread(), oldmask);
}
double HRTimer::StopTimer(void)
{
DWORD_PTR oldmask = ::SetThreadAffinityMask(::GetCurrentThread(), 0);
::QueryPerformanceCounter(&stop);
::SetThreadAffinityMask(::GetCurrentThread(), oldmask);
return ((stop.QuadPart - start.QuadPart) * frequency);
}