以毫秒和微秒精度测量 POSIX 中经过时间的最佳方法是什么?

What's the best way of measuring elapsing time in POSIX with the milliseconds and microsecond accuracy?

我有一些功能foo,我想以下列格式获取经过的时间,例如:

1 seconds 101 milliseeconds 31 microseconds

0 seconds 91 milliseeconds 101 microseconds

现在我用下面的代码来解决这个问题:

static struct timeval t1, t2;
gettimeofday(&t1, NULL);
foo();
gettimeofday(&t2, NULL);
unsigned long long t = 1000 * (t2.tv_sec - t1.tv_sec) + (t2.tv_usec - t1.tv_usec) / 1000;
printf("elapsed time %llu ms\n", t);

这个公式是从网上拿来的,不是很懂。为什么我要 1000 乘以 (t2.tv_sec - t1.tv_sec)? 以毫秒和微秒精度测量 POSIX 流逝时间的最佳方法是什么?

tv_usec 字段是以微秒为单位的经过时间,tv_sec 是以秒为单位的经过时间。

因此,将 tv_sec 字段乘以 1000 可以将秒转换为毫秒,将 tv_usec 除以 1000 可以将微秒转换为毫秒。

我本来打算建议 clock_gettime() 但在我添加之前,Let_Me_Be 发布了一个建议的答案。

测量时间是一个复杂的问题。通常最好的方法是使用 clock_gettime().

它支持多种具有不同特性的时钟。查看 this link 了解更多信息。