C - 计算时间的gettimeofday?

时间:2011-03-19 14:04:49

标签: c

你知道如何使用gettimeofday来测量计算时间吗?我可以通过这段代码测量一次:

  char buffer[30];
  struct timeval tv;

  time_t curtime;



 gettimeofday(&tv, NULL); 
 curtime=tv.tv_sec;

 strftime(buffer,30,"%m-%d-%Y  %T.",localtime(&curtime));
 printf("%s%ld\n",buffer,tv.tv_usec);

这个是在计算之前制作的,第二个是在之后制作的。但是你知道如何减去它吗?

我需要以毫秒为单位的结果

5 个答案:

答案 0 :(得分:53)

要减去时间段:

gettimeofday(&t0, 0);
/* ... */
gettimeofday(&t1, 0);
long elapsed = (t1.tv_sec-t0.tv_sec)*1000000 + t1.tv_usec-t0.tv_usec;

假设您将使用短于~2000秒的间隔,此时算术可能会溢出,具体取决于所使用的类型。如果您需要使用更长的时间间隔,只需将最后一行更改为:

long long elapsed = (t1.tv_sec-t0.tv_sec)*1000000LL + t1.tv_usec-t0.tv_usec;

答案 1 :(得分:3)

如果您想衡量代码效率,或者以任何其他方式衡量时间间隔,以下内容会更容易:

#include <time.h>

int main()
{
   clock_t start = clock();
   //... do work here
   clock_t end = clock();
   double time_elapsed_in_seconds = (end - start)/(double)CLOCKS_PER_SEC;
   return 0;
}

HTH

答案 2 :(得分:2)

@Daniel Kamil Kozar提供的答案是正确的答案 - gettimeofday实际上不应该用来衡量经过的时间。请改用clock_gettime(CLOCK_MONOTONIC)。

手册页说 - gettimeofday()返回的时间受系统时间不连续跳转的影响(例如,如果系统管理员手动更改系统时间)。如果需要单调递增时钟,请参阅clock_gettime(2)。

Opengroup说 - 应用程序应该使用clock_gettime()函数而不是过时的gettimeofday()函数。

每个人似乎都喜欢gettimeofday直到他们遇到无法工作或不存在的情况(VxWorks)... clock_gettime非常棒且便携。

&LT;&LT;

答案 3 :(得分:1)

您的curtime变量保存自纪元以来的秒数。如果你得到一个之前和一个之后,后一个减去前一个是经过的时间(以秒为单位)。您可以正确减去time_t值。

答案 4 :(得分:1)

没有。 gettimeofday should NEVER be used to measure time

这会导致整个地方出现错误。请不要添加更多错误。