在寫程序時,經常要計算某一段程序運行所需要的時間,通常用GetCurrentTime來計算時間差,但此函數所得的時間本身就不准備,它的精度也是毫秒級的,所以測試程序的運行時間也只是一個大概時間。要得到微秒級精確度可以使用函數QueryPerformanceCounter和QueryPerformanceFrequency,這兩個函數是根據CPU的嘀嗒來進行計數的。為了方便代碼編寫,利用C++類的構造與析構函數的特性寫一個打印代碼運行時間的類
class CPrintfCodeTime
{
public:
CPrintfCodeTime(const char* vCodeName)
{
m_strName = (NULL != vCodeName)?vCodeName:"";
LARGE_INTEGER tTimer;
QueryPerformanceCounter(&tTimer);
m_llTime = tTimer.QuadPart;
}
~ CPrintfCodeTime(void)
{
LARGE_INTEGER tTimer;
QueryPerformanceCounter(&tTimer);
double dbTime = double(tTimer.QuadPart - m_llTime);
//獲取CPU的頻率
QueryPerformanceFrequency(&tTimer);
dbTime = dbTime/tTimer.QuadPart;
m_strRunCode += vCode;
char tBuf[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();
}
string m_strName;
LONGLONG m_llTime;
};
本文出自 “阿木雪” 博客,謝絕轉載!