// hrTimer.cpp // a High Resolution Timer for C++ code // from: How do I do High Resolution Timing in C++ on Windows? // A Very Accurate Timer // By David Bolton, About.com // revised by tom bailey 16 sep 08 #include "hrTimer.h" LARGE_INTEGER getFrequency() { LARGE_INTEGER freq; QueryPerformanceFrequency( &freq ); return freq; } LARGE_INTEGER Timer::frequency = getFrequency(); Timer::Timer() : running( false ) { elapsedTime.QuadPart = 0; } void Timer::start( ) { if( !running ) { QueryPerformanceCounter( &startTime ) ; running = true; } } void Timer::stop() { LARGE_INTEGER stopTime; if( running ) { QueryPerformanceCounter( &stopTime ) ; running = false; elapsedTime.QuadPart += stopTime.QuadPart - startTime.QuadPart; } } double Timer::operator()() { if( running ) { stop(); start(); } return double( elapsedTime.QuadPart) / double( frequency.QuadPart ); } void Timer::reset() { if( running ) { stop(); elapsedTime.QuadPart = 0; start(); } else elapsedTime.QuadPart = 0; } long Timer::qpart() { return long( elapsedTime.QuadPart ); }