//ElapsedTime.h
#ifndef _ELAPSED
#define _ELAPSED
class CElapsed
{
public:
CElapsed();
bool Begin();
double End(); //停止计数
bool Available();//是否可调用这两个函数
_int64 GetFreq();
_int64 GetBeginTime();
void SetBeginTime( _int64 bgTime );
private:
int Initialized;
_int64 Frequency;
_int64 BeginTime;
};
#endif
//ElapsedTime.cpp
//另外gettickcount()这个函数也是可以精确到ms的
#include <stdafx.h>
#include "ElapsedTime.h"
CElapsed::CElapsed()
{
Initialized = QueryPerformanceFrequency((LARGE_INTEGER *)&Frequency);
}
bool CElapsed:: Begin()
{
if(!Initialized)
{
return 0; //某些CPU不运行此函数调用
}
return QueryPerformanceCounter((LARGE_INTEGER *)&BeginTime);
}
double CElapsed::End() //停止计数
{
if(!Initialized)
{
return 0.0; //某些CPU不运行此函数调用
}
_int64 endtime;
QueryPerformanceCounter((LARGE_INTEGER *)&endtime);
_int64 elapsed = endtime - BeginTime;
// return (double)elapsed / (double)Frequency;
TRACE("%f/n",(double)elapsed / (double)Frequency);
CString str;
str.Format("%f",(double)elapsed / (double)Frequency);
AfxMessageBox(str);
return 0;
}
bool CElapsed::Available()//是否可调用这两个函数
{
return Initialized;
}
_int64 CElapsed::GetFreq()
{
return Frequency;
}
_int64 CElapsed::GetBeginTime()
{
return BeginTime;
}
void CElapsed::SetBeginTime( _int64 bgTime )
{
BeginTime = bgTime;
}
// demo
CElapsed m_elapsed;
m_elapsed.Begin();
// 希望计时的代码
m_elapsed.End();
本文介绍了一个名为 CElapsed 的高性能计时器类的实现细节。该类利用 QueryPerformanceCounter 函数来获取高精度的时间戳,进而计算出两时刻之间的间隔时间。文中还提供了使用示例,帮助读者理解如何在实际项目中应用此类。
2263

被折叠的 条评论
为什么被折叠?



