在写程序时,经常要计算某一段程序运行所需要的时间,通常用GetCurrentTime来计算时间差,但此函数所得的时间本身就不准备,它的精度也是毫秒级的,所以测试程序的运行时间也只是一个大概时间。要得到微秒级精确度可以使用函数QueryPerformanceCounter和QueryPerformanceFrequency,这两个函数是根据CPU的嘀嗒来进行计数的。为了方便代码编写,利用C++类的构造与析构函数的特性写一个打印代码运行时间的类
classCPrintfCodeTime
{
public:
CPrintfCodeTime(constchar*vCodeName)
{
m_strName=(NULL!=vCodeName)?vCodeName:"";
LARGE_INTEGERtTimer;
QueryPerformanceCounter(&tTimer);
m_llTime=tTimer.QuadPart;
}
~CPrintfCodeTime(void)
{
LARGE_INTEGERtTimer;
QueryPerformanceCounter(&tTimer);
doubledbTime=double(tTimer.QuadPart-m_llTime);
//获取CPU的频率
QueryPerformanceFrequency(&tTimer);
dbTime=dbTime/tTimer.QuadPart;
m_strRunCode+=vCode;
chartBuf[100]={0};
#ifndef__BORLANDC__
//输出调试信息
sprintf_s(tBuf,"运行时间为%.3f毫秒\n",dbTime*1000);
#else
sprintf(tBuf,"运行时间为%.3f毫秒\n",dbTime*1000);
#endif
m_strName+=tBuf;
OutputDebugString(m_strName.c_str());
m_strName.clear();
}
stringm_strName;
LONGLONGm_llTime;
};
如果觉得《精确打印程序的运行时间》对你有帮助,请点赞、收藏,并留下你的观点哦!