2011-11-14 65 views
0

可能重複:
C++ Timer function to provide time in nano seconds
High resolution timer with C++ and Linux?定時功能

我想時間幾個C函數,和我試圖拿出一個系統的方法這樣做。到目前爲止,我有的是時間的最簡單形式:

#include <sys/time.h> 
struct timeval start_time, end_time; 
gettimeofday(&start_time, NULL); 
<my function> 
gettimeofday(&end_time, NULL); 
total_usecs = (end_time.tv_sec-start_time.tv_sec) * 1000000 + 
    (end_time.tv_usec-start_time.tv_usec); 
printf ("parfib,%ld,%d\n",(long)res,total_usecs); 

我還發現

timespec time1, time2; 
int temp; 
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); 
    <my function> 
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2); 
cout<<diff(time1,time2).tv_sec<<":"<<diff(time1,time2).tv_nsec<<endl; 

但即使有std=gnu99我一直沒能得到這個工作(我複製了上述來自網站的代碼,但在編譯之前我確實翻譯過C :)。無論如何,我想知道您是否有任何人知道文檔或博客或討論計時功能,如我正在嘗試做的事情。 小心,我不是在諸如gprof之類的分析器之後,我需要這個分析器是手工製作的。

感謝您的任何提示。

+0

我想你需要比時間函數更好的採樣? –

+0

「我需要這個探查器是手工製作的」。如果目標是*測量*,只需圍繞環路來獲得所需的所有準確性。如果目標是有效地找到加速機會,測量是不會做到的。 * [This do it。](http://stackoverflow.com/questions/375913/what-c​​an-i-use-to-profile-c-code-in-linux/378024#378024)* –

回答

3

要編譯第二個例子中,你將需要:

gcc -Wall -Wextra -D_POSIX_C_SOURCE=199309L timer.c -lrt 

_POSIX_C_SOURCE指出你所定位的投放POSIX版本 - 它需要得到包括任何系統頭文件之前定義,通過-D這樣做是最安全的。 clock_gettime也取決於鏈接到librt(-lrt)。