大恒的时间差类,精确到微秒级
class CStopWatch
{
public:
/// 构造函数
CStopWatch()
{
Start();
}
/// 开始计时
void Start()
{
QueryPerformanceCounter(&m_StartTime);
}
/// 停止计时,ms
double Stop()
{
QueryPerformanceCounter(&m_StopTime);
double theElapsedTime = ElapsedTime();
m_StartTime = m_StopTime;
return theElapsedTime;
}
/// 获取时间差
double ElapsedTime()
{
LARGE_INTEGER timerFrequency; QueryPerformanceFrequency(&timerFrequency);
__int64 oldTicks = ((__int64)m_StartTime.HighPart << 32) + (__int64)m_StartTime.LowPart;
__int64 newTicks = ((__int64)m_StopTime.HighPart << 32) + (__int64)m_StopTime.LowPart;
long double timeDifference = (long double) (newTicks - oldTicks);
long double ticksPerSecond = (long double) (((__int64)timerFrequency.HighPart << 32) + (__int64)timerFrequency.LowPart);
return (double)(timeDifference * 1000/ ticksPerSecond);
}
protected:
LARGE_INTEGER m_StartTime; ///< 开始时间
LARGE_INTEGER m_StopTime; ///< 停止时间
};
评论