C語言兩個計時函數clock()和gettimeofday()


剛剛做了項測試,要用某程序在Linux平台的運行時間(需精確到ms級)上報。

一開始用的是clock()函數:

頭文件:time.h

函數原型:clock_t clock(void);

功能:該函數返回值是硬件滴答數,要換算成秒,需要除以CLK_TCK或者 CLOCKS_PER_SEC。比如,在VC++6.0下,這兩個量的值都是1000。

用法

   clock_t start,end;  

   start = clock();  

   //…executing…  

   end = clock();  

   printf("Used time=%f\n",(double)(end-start)/CLOCKS_PER_SEC); 

但是非常奇怪,用時顯示一直在1.2s左右,與直覺嚴重不符。原因未知。

 

后來根據參考文獻(C語言中常用計時方法總結)改用gettimeofday()函數,結果就正常了,大約在10s左右。

頭文件:sys/time.h

函數原型:int gettimeofday(struct timeval *tv,struct timezone *tz);

說明:其參數tv是保存獲取時間結果的結構體,參數tz用於保存時區結果(若不使用則傳入NULL即可)。

timeval的定義為:

 struct timeval {  

  long tv_sec; // 秒數  

     long tv_usec; //微秒數  

}  

可見該函數可用於在linux中獲得微秒精度的時間。

用法

   struct timeval start,end;  

   gettimeofday(&start, NULL );  

   //…executing…  

   gettimeofday(&end, NULL );  

   double timeuse = ( end.tv_sec - start.tv_sec ) + (end.tv_usec - start.tv_usec)/1000000.0;  

   printf("time=%f\n",timeuse);  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM