struct timeval
代表一个时间点,它有两个成员:tv_sec
(秒)和tv_usec
(微秒)。在这种表示中,tv_usec
本身不是绝对时间,而是相对于tv_sec
的亚秒偏移量。
struct timespec
的工作方式与之相同,但是它的偏移值(tv_nsec
)以纳秒为单位存储。
问题是: 是否有一种标准的方法可以在这两者之间进行转换?
sys/time.h
中有两个宏可以满足您的需求:TIMEVAL_TO_TIMESPEC(X, Y)
和
TIMESPEC_TO_TIMEVAL(X, Y)
请查看此处的文档:http://www.daemon-systems.org/man/TIMEVAL_TO_TIMESPEC.3.html
看这个文档,我认为将tv_usec
乘以1000足以得到tv_nsec
。
更重要的是,我怀疑不同结构体的来源可能来自于不同的时钟。
tv_usec
表示微秒偏移量,保证小于1000000,所以将其乘以1000得到的值小于10亿。 - JaakkoKtv_nsec
除以1000得到 tv_usec
(可能先加上500,以四舍五入)。 - user862787
#include <sys/time.h>
之前定义_GNU_SOURCE
,以便获取这些宏。 - Craig McQueen