//Timer.h
#include <windows.h>
class CTimer
{
public:
CTimer(void);
~CTimer(void);
void Delay(DWORD dwMicrosecond);
void TimeBegin(void);
void TimeEnd(void);
DWORD GetTimeValue(void) const;
void Reset(void);
private:
LARGE_INTEGER m_i64CPUFreq;
LARGE_INTEGER m_i64Begin;
LARGE_INTEGER m_i64End;
};
//Timer.cpp
#include <algorithm>
using namespace std;
#include "Timer.h"
CTimer::CTimer(void)
{
QueryPerformanceFrequency(&m_i64CPUFreq);
}
CTimer::~CTimer(void)
{
}
/////////////////////////////////////////////////////////////////////////////
// 延时N微秒
void CTimer::Delay(DWORD dwMicrosecond)
{
const DWORD dwSToUs = 1000000L;
const DWORD dwMsToUs = 1000;
DWORD dwS, dwMs, dwUs, dwResidue;
LARGE_INTEGER i64TickCount;
dwS = dwMicrosecond / dwSToUs;
dwResidue = dwMicrosecond % dwSToUs;
dwMs = dwResidue / dwMsToUs;
dwUs = dwResidue % dwMsToUs;
i64TickCount.QuadPart = dwS * m_i64CPUFreq.QuadPart
+ dwMs * m_i64CPUFreq.QuadPart / dwMsToUs
+ dwUs * m_i64CPUFreq.QuadPart / dwSToUs;
LARGE_INTEGER i64Begin, i64End, i64CurrentTick;
QueryPerformanceCounter(&i64Begin);
i64End.QuadPart = i64Begin.QuadPart + i64TickCount.QuadPart;
do
{
QueryPerformanceCounter(&i64CurrentTick);
} while (i64CurrentTick.QuadPart <= i64End.QuadPart);
return;
}
/////////////////////////////////////////////////////////////////////////////
// 计时开始
void CTimer::TimeBegin(void)
{
QueryPerformanceCounter(&m_i64Begin);
}
/////////////////////////////////////////////////////////////////////////////
// 计时结束
void CTimer::TimeEnd(void)
{
QueryPerformanceCounter(&m_i64End);
}
/////////////////////////////////////////////////////////////////////////////
//得到时间值,返回微秒数
DWORD CTimer::GetTimeValue(void) const
{
DWORD dwTotalMicrosecond = 0;
LARGE_INTEGER i64TickCount;
i64TickCount.QuadPart = m_i64End.QuadPart - m_i64Begin.QuadPart;
dwTotalMicrosecond = i64TickCount.QuadPart * 1000000 / m_i64CPUFreq.QuadPart;
return dwTotalMicrosecond;
}
/////////////////////////////////////////////////////////////////////////////
// 复位计时器
void CTimer::Reset(void)
{
m_i64Begin = m_i64End;
}