剛剛做了項測試,要用某程序在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; //微秒數
}
用法:
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);
