【发布时间】:2015-09-25 07:52:56
【问题描述】:
除了精度的不同,struct timeval和struct timespec有什么区别?如果我需要的精度低于 µs(例如毫秒),我为什么要使用一个而不是另一个?
在我的编译器上(ARM 的 gcc):
/* POSIX.1b structure for a time value. This is like a `struct timeval' but
has nanoseconds instead of microseconds. */
struct timespec
{
__time_t tv_sec; /* Seconds. */
__syscall_slong_t tv_nsec; /* Nanoseconds. */
};
/* A time value that is accurate to the nearest
microsecond but also has a range of years. */
struct timeval
{
__time_t tv_sec; /* Seconds. */
__suseconds_t tv_usec; /* Microseconds. */
};
__syscall_slong_t 和 __suseconds_t 都定义为“长字”。
【问题讨论】:
-
您为要使用的系统调用使用正确的结构——
struct timeval用于gettimeofday()(和select()),struct timespec用于clock_gettime()。对于内部处理,您可以使用其中一个或两个,这对您来说很方便。两者之间的转换相对无痛;输入和输出需要一点点注意(主要是确保小数部分的前导零在必要时正确打印和扫描)。 BSD 和 Mac OS X 为struct timeval提供了一些原始的算术和比较工具;struct timespec没有类似物。 -
你应该看看Why C has so many different types,它也在询问
struct timeval。