程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 計算C++程序運行時間總結

計算C++程序運行時間總結

編輯:C++入門知識

我現在用C++語言寫了一段程序,想計算這段程序運行的准確時間,這是要用於跟其它實驗結果作對比的,所以要精確到毫秒,C++程序運行時間 確實很難掌握啊!

C++程序運行時間中的計時函數是clock(),而與其相關的數據類型是clock_t。在MSDN中,查得對clock函數定義如下:  

  1. #ifndef   _CLOCK_T_DEFINED     
  2.  typedef   long   clock_t;     
  3.  #define   _CLOCK_T_DEFINED     
  4.  #endif    

這個函數返回從“開啟這個程序進程”到“程序中調用clock()函數”時之間的CPU時鐘計時單元clock   tick)數,在MSDN中稱之為掛鐘時間wal-clock)。其中clock_t是用來保存時間的數據類型,在time.h文件中,我們可以找到對 它的定義:  

  1. #ifndef   _CLOCK_T_DEFINED     
  2.  typedef   long   clock_t;     
  3.  #define   _CLOCK_T_DEFINED     
  4.  #endif    

很明顯,clock_t是一個長整形數。在time.h文件中,還定義了一個常量CLOCKS_PER_SEC,它用來表示一秒鐘會有多少個時鐘計時單元,其定義如下:   

  1.  
  2. int   main(   void   )     
  3. {     
  4.       long         i   =   10000000L;     
  5.       clock_t   start,   finish;     
  6.       double     duration;     
  7.       /*   測量一個事件持續的時間*/     
  8.       printf(   "Time   to   do   %ld   empty   loops   is   ",   i   );     
  9.       start   =   clock();     
  10.       while(   i--   )             ;     
  11.       finish   =   clock();     
  12.       duration   =   (double)(finish   -   start)   /   CLOCKS_PER_SEC;     
  13.       printf(   "%f   seconds"n",   duration   );     
  14.       system("pause");     
  15. }    

可以看到每過千分之一秒1毫秒),調用clock)函數返回的值就加1。下面舉個例子,你可以使用公式clock()/CLOCKS_PER_SEC來計算一個進程自身的C++程序運行時間 :

  1. void   elapsed_time()     
  2.   {     
  3.   printf("Elapsed   time:%u   secs."n",clock()/CLOCKS_PER_SEC);     
  4.   }    

當然,你也可以用clock函數來計算你的機器運行一個循環或者處理其它事件到底花了多少時間:  

  1.  
  2. int   main(   void   )     
  3. {     
  4.       long         i   =   10000000L;     
  5.       clock_t   start,   finish;     
  6.       double     duration;     
  7.       /*   測量一個事件持續的時間*/     
  8.       printf(   "Time   to   do   %ld   empty   loops   is   ",   i   );     
  9.       start   =   clock();     
  10.       while(   i--   )             ;     
  11.       finish   =   clock();     
  12.       duration   =   (double)(finish   -   start)   /   CLOCKS_PER_SEC;     
  13.       printf(   "%f   seconds"n",   duration   );     
  14.       system("pause");     
  15. }    

上面我們看到時鐘計時單元的長度為1毫秒,那麼計時的精度也為1毫秒,那麼我們可不可以通過改變CLOCKS_PER_SEC的定義,通過把它定義的大一 些,從而使計時精度更高呢?通過嘗試,你會發現這樣是不行的。在標准C++程序運行時間 中,最小的計時單位是一毫秒。 

  1. C與C++中標准輸入實現方式上的一點區別
  2. C++編譯器如何對Const常量進行分配存儲空間
  3. C++類庫設計的基本構思與方法
  4. 玩轉C++語言的幾種方法
  5. 如何更好的進行C++代碼編制

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved