1. 程式人生 > >C++中幾種測試程序運行時間的方法<轉>

C++中幾種測試程序運行時間的方法<轉>

begin html cnblogs bsp 可能 boost庫 www. rman 高精

轉的地址:https://www.cnblogs.com/silentteen/p/7532855.html

1.GetTickCount()函數

原理: GetTickCount()是獲取系統啟動後的時間間隔。通過進入函數開始定時,到退出函數結束定時,從而可以判斷出函數的執行時間(單位ms),這種時間也並非是函數或者算法的真實執行時間,因為在函數和算法線程不可能一直占用CPU,對於所有判斷執行時間的函數都是一樣,不過基本上已經很準確,可以通過查詢進行定時。註意:GetTickCount()精確度有限,跟CPU有關,一般精確度在16ms左右,最精確也不會精確過10ms。
頭文件:

include<windows.h>

測試:

int t1 = long t1 = GetTickCount();
    //...測試代碼
int t1 = long t2 = GetTickCount();
cout << "運行時間:"<<(t2-t1) << endl;

2.高精度時控函數QueryPerformanceFrequency(),QueryPerformanceCounter()

原理:QueryPerformanceCounter()這個函數返回高精確度性能計數器的值,它可以以微妙為單位計時.但是QueryPerformanceCounter()確切的精確計時的最小單位是與系統有關的,所以,必須要查詢系統以得到QueryPerformanceCounter()返回的嘀噠聲的頻率.QueryPerformanceFrequency()提供了這個頻率值,返回每秒嘀噠聲的個數. 計算確切的時間是從第一次調用QueryPerformanceCounter()開始的假設得到的LARGE_INTEGER為nStartCounter,過一段時間後再次調用該函數結束的,設得到nStopCounter.兩者之差除以QueryPerformanceFrequency()的頻率就是開始到結束之間的秒數.由於計時函數本身要耗費很少的時間,要減去一個很少的時間開銷.但一般都把這個開銷忽略。

頭文件:

#include<windows.h>  

測試:

double time=0;  
double counts=0;  
LARGE_INTEGER nFreq;  
LARGE_INTEGER nBeginTime;  
LARGE_INTEGER nEndTime;  
QueryPerformanceFrequency(&nFreq);  
QueryPerformanceCounter(&nBeginTime);//開始計時  
    //...測試代碼
QueryPerformanceCounter(&nEndTime);//
停止計時 time=(double)(nEndTime.QuadPart-nBeginTime.QuadPart)/(double)nFreq.QuadPart;//計算程序執行時間單位為s cout<<"運行時間:"<<time*1000<<"ms"<<endl;

3.使用Boost庫中的timer

timer類可以測量時間的流逝,是小型計時器,提供毫秒級別的計時精度。
頭文件:

#include<boost/timer.hpp> 

測試:

timer t;//聲明計時器對象並開始計時 
    //...測試代碼
cout<<"運行時間:"<<t.elapsed() <<"s"<<endl;//輸出已流失的時間

C++中幾種測試程序運行時間的方法<轉>