|
#pragma once
#include <exception>
class Performance_counter_meter
{
public:
Performance_counter_meter()
{
m_counter = 0L;
m_frequency.QuadPart = m_performance_counter_start.QuadPart = m_duration.QuadPart = 0L;
if ( FALSE == ::QueryPerformanceFrequency(&m_frequency) )
{
throw std::exception("Failed to initialize performance counter.");
}
}
bool start(void)
{
return (::QueryPerformanceCounter(&m_performance_counter_start) != FALSE);
}
bool end(void)
{
LARGE_INTEGER performance_counter;
bool rc = (::QueryPerformanceCounter(&performance_counter) != FALSE);
m_duration.QuadPart += performance_counter.QuadPart - m_performance_counter_start.QuadPart;
return rc;
}
double get_duration(void)
{
return (double)m_duration.QuadPart / m_frequency.QuadPart;
}
bool get_current_duration(double& duration)
{
LARGE_INTEGER performance_counter, counter_duration;
bool rc = (::QueryPerformanceCounter(&performance_counter) != FALSE);
counter_duration.QuadPart = performance_counter.QuadPart - m_performance_counter_start.QuadPart;
duration = (double)counter_duration.QuadPart / m_frequency.QuadPart;
return rc;
}
LONGLONG get_counter(void)
{
return m_counter;
}
void set_iteration_done(LONGLONG iteration_done)
{
m_counter = iteration_done;
}
private:
LARGE_INTEGER m_frequency;
LARGE_INTEGER m_performance_counter_start;
LARGE_INTEGER m_duration;
LONGLONG m_counter;
};
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.