//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();