程式計時 clock()

來源:互聯網
上載者:User

(轉自csdn論壇中一篇文章)

 

http://topic.csdn.net/t/20051218/20/4466545.html

 

 

C/C++中的計時函數是clock(),而與其相關的資料類型是clock_t。在MSDN中,查得對clock函數定義如下: 

clock_t   clock(   void   ); 

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

#ifndef   _CLOCK_T_DEFINED 
typedef   long   clock_t; 
#define   _CLOCK_T_DEFINED 
#endif 

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

#define   CLOCKS_PER_SEC   ((clock_t)1000) 

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

void   elapsed_time() 

printf( "Elapsed   time:%u   secs./n ",clock()/CLOCKS_PER_SEC); 

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

#include   “stdio.h” 
#include   “stdlib.h” 
#include   “time.h” 

int   main(   void   ) 

      long         i   =   10000000L; 
      clock_t   start,   finish; 
      double     duration; 
      /*   測量一個事件持續的時間*/ 
      printf(   "Time   to   do   %ld   empty   loops   is   ",   i   ); 
      start   =   clock(); 
      while(   i--   )             ; 
      finish   =   clock(); 
      duration   =   (double)(finish   -   start)   /   CLOCKS_PER_SEC; 
      printf(   "%f   seconds/n ",   duration   ); 
      system( "pause "); 

在筆者的機器上,運行結果如下: 

Time   to   do   10000000   empty   loops   is   0.03000   seconds 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.