以毫秒和微秒精度测量 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 了解更多信息。
我有一些功能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 了解更多信息。