C中的定时功能

时间:2011-11-14 23:56:26

标签: c profiling

  

可能重复:
  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之类的分析器之后,我需要手工制作这个分析器。

感谢您的任何提示。

1 个答案:

答案 0 :(得分:3)

要编译第二个示例,您需要:

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

_POSIX_C_SOURCE指定您要定位的POSIX版本 - 需要在包含任何系统头文件之前定义它,因此通过-D执行此操作是最安全的。 clock_gettime还取决于链接到librt(-lrt)。