C - 计算时间的gettimeofday?

Way*_*int 27 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);
Run Code Online (Sandbox Code Playgroud)

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

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

R..*_*R.. 56

要减去时间间隔:

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

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

long long elapsed = (t1.tv_sec-t0.tv_sec)*1000000LL + t1.tv_usec-t0.tv_usec;
Run Code Online (Sandbox Code Playgroud)

  • 分段错误与此代码无关.它正在其他地方发生. (19认同)
  • 它算微秒.如果需要毫秒,则除以1000,但毫秒通常被认为是非常差的时间分辨率.如果您遇到分段错误,您需要显示您的代码或使用调试器来查找自己发生的位置,但由于我建议的任何代码,它肯定不会发生. (8认同)

Bor*_*lid 0

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