1. 程式人生 > 其它 >C++測試/獲取程式碼執行時間

C++測試/獲取程式碼執行時間

技術標籤:c++程式語言作業系統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,

詳細解釋(GetTickcount函式:它返回從作業系統啟動到當前所經過的毫秒數,常常用來判斷某個方法執行的時間,其函式原型是DWORD GetTickCount(void),返回值以32位的雙字型別DWORD儲存,因此可以儲存的最大值是(2^32-1) ms約為49.71天,因此若系統執行時間超過49.71天時,這個數就會歸0,MSDN中也明確的提到了:“Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days.”。因此,如果是編寫伺服器端程式,此處一定要萬分注意,避免引起意外的狀況)

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