C – 计算时间的gettimeofday?

你知道如何使用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); 

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

编辑:我需要以毫秒为单位的结果。 顺便说一句,为什么我在编辑和创建新问题时无法评论和看到按钮?

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

要减去时间间隔:

 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; 

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

 #include  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; } 

心连心

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


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

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

每个人似乎都喜欢gettimeofday,直到遇到它不起作用或不存在的情况(VxWorks)… clock_gettime非常棒且便携。

<<

不应该使用gettimeofday来测量时间 。

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