【发布时间】:2020-03-30 14:22:38
【问题描述】:
我需要使用函数 gettimeofday 来完成家庭作业,在阅读了手册页并查看了一些在线示例之后,我不明白为什么人们有时会同时使用结构的 tv_sec 成员和结构的 tv_usec 成员。 手册页指出:
The tv argument is a struct timeval (as specified in <sys/time.h>):
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
所以,假设我需要以纳秒为单位返回时间,并且我创建了两个 timeval 结构,start 和 end,并且我使用 gettimeofday() 记录了它们的时间。 当然,我的第一个想法是计算微秒的差异,即 start.tv_usec-end.tv_usec 然后将其乘以 1000 以将其转换为纳秒。
但是,许多在线示例和教程都会计算秒和微秒的差异,然后将它们转换然后相加。 (e.g.)
我通读了整个手册页,但找不到原因,如果有任何解释,我将不胜感激。
【问题讨论】:
-
gettimeofday()已被 posix 弃用,顺便说一句。请改用clock_gettime(),尤其是如果您需要纳秒。 -
或者,因为它被标记为 C++ 而不是 C,所以使用
std::chrono::high_resolution_clock。 -
或
std::chrono::steady_clock,如果时间可能倒退是一个问题。
标签: c++ c linux manpage gettimeofday