C++測試/獲取程式碼執行時間
C++ 高階之程式執行時間監聽
C++測試/獲取程式碼執行時間(clock方法與dword 方法的區別)
方法一:Clock
clock()捕捉從程式開始執行到clock()被呼叫時所耗費的時間,這個單位是常熟CLK_TCK:機器時鐘每秒所走的時鐘打點數
頭部需要引入ctime標頭檔案(即:#include<ctime>)
clock_t startTime,endTime;
startTime = clock();
需要測試的程式程式碼
endTime = clock();
執行結果
方法二:GetTickCount
GetTickCount是一種函式,GetTickCount返回從作業系統啟動所經過的毫秒數,它的返回值是DWORD,
int main()
{
DWORD dwStart = GetTickCount();
cout<<"fhshdfudshfuisdhfdshfdsfdshfiuhsdihfiudshfhsdlihfdis"<<endl;
DWORD dwEnd =GetTickCount();
cout << "The run time is: " <<dwEnd - dwStart / CLOCKS_PER_SEC << "ms" << endl;
getchar();
return 0;
}
執行結果
CLOCK與GetTickCount各自的優缺點和區別:
**clock:**程式中經常用time()函式來返回當前系統時間的秒數,來計時或計算時間差。如果需要用到更高精度的時間,就會自然想到用clock()函式。想當然的認為它返回從程式開始tick數,用clock()/CLOCKS_PER_SEC就能得到以秒計數的時間了。然而結果不是這樣,看下面的程式log。一行開頭是系統時間,後面是clock()算出來的,明顯比系統時間要慢不少,也就是說clock計算執行時間的誤差較大
GetTickCount: 在要求誤差不大於1毫秒的情況下,可以採用GetTickCount()函式,該函式的返回值是DWORD型,表示以毫秒為單位的計算機啟動後經歷的時間間隔。使用下面的程式設計語句,可以實現50毫秒的精確定時,其誤差小於1毫秒。
對於一般的實時控制,使用GetTickCount()函式就可以滿足精度要求,但要進一步提高計時精度,就要採用QueryPerformanceFrequency()函式和QueryPerformanceCounter()函式。這兩個函式是VC提供的僅供Windows 9X使用的高精度時間函式,並要求計算機從硬體上支援高精度計時器。QueryPerformanceFrequency()函式和QueryPerformanceCounter()函式的原型為:
BOOL QueryPerformanceFrequency(LARGE—INTEGER *lpFrequency);
BOOL QueryPerformanceCounter(LARGE—INTEGER *lpCount) ;