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

C++計時具體操作方法詳解

編輯:C++入門知識

C++編程語言應用范圍廣泛,功能強大,我們在上篇文章中就已經對C++時間的基本概念進行了一個簡單的介紹。現在,我們將進一步對C++計時的具體操作進行解讀,讓大家能從中獲得更多的知識。

  • C++多態實現方法探討
  • C++類靜態成員初始化相關問題答疑
  • C++類型轉換基本概念淺談
  • C++編譯器命令列表總結
  • C++時間基本概念分享

C++計時操作中所用到的函數是clock(),而與其相關的數據類型是clock_t。在MSDN中,查得對clock函數定義如下:

clock_t clock( void );

這個C++計時的函數返回從“開啟這個程序進程”到“程序中調用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,它用來表示一秒鐘會有多少個時鐘計時單元,其定義如下:

#define CLOCKS_PER_SEC ((clock_t)1000)

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

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

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

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

在筆者的機器上,C++計時操作後的運行結果如下:

Time to do 10000000 empty loops is 0.03000 seconds

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

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