1. 程式人生 > >2009-07-03 19:48 在linux中如何獲得微秒精度的時間?-轉

2009-07-03 19:48 在linux中如何獲得微秒精度的時間?-轉

使用C的<time.h>庫函式是無法達到微秒級別的時間的,所以上網找了一下答案,原文如下:

------------------------

使用C語言進行計時,在使用者空間中可以使用C語言函式gettimeofday 得到時間,它的呼叫格式是:

#include <sys/time.h> 
int gettimeofday(struct timeval *tv, struct timezone *tz); 
int settimeofday(const struct timeval *tv , const struct timezone *tz); 
結構timeval的定義為:
struct timeval {long tv_sec; /* 秒數 */long tv_usec; /* 微秒

數 */};

可以看出,使用這種方式計時,精度可達微秒也就是10-6秒。進行計時的時候,我們需要前後呼叫兩次gettimeofday,然後計算中間的差值:

gettimeofday( &start, NULL );
foo(); 
gettimeofday( &end, NULL );
timeuse = 1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec; 
timeuse /= 1000000;

================================================================

補充:剛從我又查了一下C庫函式手冊。

Syntax:

#include <ctime> clock_t clock( void );

The clock() function returns the processor time since the program started, or - 1 if that information is unavailable. To convert the return value to seconds, divide it by CLOCKS_PER_SEC. (Note: if your compiler is POSIX compliant, then CLOCKS_PER_SEC is always defined as 1000000.)

可見在符合POSIX標準的C編譯器上,藉助clock()函式也是可以獲得微秒精度的時間值,但由於這樣的程式碼依賴於編譯器,所以不推薦使用。