C++測試程序執行時間代碼

C++測試程序執行時間代碼  

2013-03-19 09:23:24|  分類: C/C++|舉報|字號 訂閱

#include <ctime> //計時用的頭文件
#include <iostream>
using namespace std;
int main() {    
time_t start,end,time; /*注意計時所用的變量名稱*/  

/*程序開始執行,開始計時*/    
start=clock();  //獲得開始的時間,單位爲毫秒

/*程序執行過程……*/    
for(int i=0;i<=100;i++) cout << i << ' ';   
cout << endl;   

/*程序結束執行,結束計時*/   
end=clock();     //獲得結束時間

time=end-start;//這裏的時間是計算機內部時間  
cout<<"endTime - beginTime = Time"<<endl;
cout << end <<" - "<<start<<" = "<<time<< endl;    

system("pause");    
return 0;
需要取得系統精確時鐘函數:
1)對於一般的實時控制,使用GetTickCount()函數就可以滿足精度要求,但要進一步提高計時精度,就要採用 QueryPerformanceFrequency()函數和QueryPerformanceCounter()函數。
2)這兩個函數是VC提供的僅供 Windows   9X使用的高精度時間函數,並要求計算機從硬件上支持高精度計時器。
3) QueryPerformanceFrequency()函數和 QueryPerformanceCounter()函數的原型爲:  

  BOOL   QueryPerformanceFrequency(LARGE_INTEGER   *lpFrequency);

  BOOL   QueryPerformanceCounter(LARGE_INTEGER   *lpCount);
  數據類型LARGE—INTEGER既可以是一個作爲8字節長的整型數,也可以是作爲兩個4字節長的整型數的聯合結構,其具體用法根據編譯器是否支持64位而定。該類型的定義如下:  
  typedef   union   _LARGE_INTEGER
  {
     struct
     {
              DWORD   LowPart;   //   4字節整型數  
              LONG  HighPart;   //   4字節整型數  
          };  
  LONGLONG  QuadPart;  

  //   8字節整型數  
  }   LARGE_INTEGER;  

4)在進行計時之前,應該先調用QueryPerformanceFrequency()函數獲得機器內部計時器的時鐘頻率。筆者在三種PentiumⅡ機器上使用該函數,得到的時鐘頻率都是1193180Hz。接着,筆者在需要嚴格計時的事件發生之前和發生之後分別調用QueryPerformanceCounter()函數,利用兩次獲得的計數之差和時鐘頻率,就可以計算出事件經歷的精確時間。
  以下程序是用來測試函數Sleep(100)的精確持續時間。  

  LARGE—INTEGER   litmp;  
  LONGLONG   QPart1,QPart2;  
  double   dfMinus,   dfFreq,   dfTim;  
  QueryPerformanceFrequency(&litmp);  
  //   獲得計數器的時鐘頻率  
  dfFreq   =   (double)litmp.QuadPart;  
  QueryPerformanceCounter(&litmp);  
  //   獲得初始值  
  QPart1   =   litmp.QuadPart;  
  Sleep(100)   ;  
  QueryPerformanceCounter(&litmp);  
  //   獲得終止值  
  QPart2   =   litmp.QuadPart;
  dfMinus   =   (double)(QPart2   -   QPart1);
  dfTim   =   dfMinus   /   dfFreq;
  //   獲得對應的時間值
  執行上面程序,得到的結果爲dfTim=0.097143767076216(秒)。細心的讀者會發現,每次執行的結果都不一樣,存在一定的差別,這是由於Sleep()自身的誤差所致
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章