首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C时间vs timespec

C时间vs timespec
EN

Stack Overflow用户
提问于 2015-07-08 01:10:05
回答 3查看 25.3K关注 0票数 15

除了精度上的不同,struct timevalstruct timespec还有什么不同?如果我需要比µs更低的精度(比如毫秒),为什么我要使用一个而不是另一个呢?

在我的编译器(ARM的gcc)上:

代码语言:javascript
复制
/* 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都被定义为“长词”。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-08 01:31:00

我认为这实际上只是一个API不兼容的问题。pselect()clock_gettime()等POSIX-y调用使用struct timespec。像utimes()这样的各种文件系统调用,以及像gettimeofday()select()这样的各种Linux调用,都使用struct timeval。从几个手册页可以大致概括一下,我怀疑struct timeval具有BSD传统,而struct timespec是POSIX。

如果您正在进行间隔测量,那么没有理由不利用clock_gettime()的额外精度-尽管要注意,通常是硬件而不是头文件限制了您的测量精度。出于显示目的,除以一百万并不比除以一千更好或更差。还有,Mac OS X does not support clock_gettime()

但是,如果您正在进行大量的文件时间操作,那么使用utimes()等API中使用的struct timeval可能更有意义。struct timeval在Linux、BSD和Mac上也有一些比较功能,例如timercmp()timersub() (同样,请参阅手册页)。

我会根据您打算使用的API做出决定,而不是根据结构本身。(如果需要,也可以编写一个带有转换方法的包装类。)

票数 20
EN

Stack Overflow用户

发布于 2015-07-08 01:31:09

两者都是为POSIX.1-2001定义的AFAIK,因此从可移植性的角度来看,使用哪一个并不重要。最简单的答案是:对于您想要调用的API,使用您需要的任何一个。

使用struct timeval可能会带来与平台相关的大小优势

类型suseconds_t应为带符号整数类型,至少能够存储-1,1000000范围内的值。

struct timespec中,第二个成员的类型为long。在32位平台上,一个int就足以满足suseconds_t要求。但是,在64位系统上,time_t通常是64位的,因此强制结构填充到16字节。因此,尺寸优势是--不太可能的。

票数 3
EN

Stack Overflow用户

发布于 2017-11-19 10:53:27

就我个人而言,我两个都不用。我更喜欢用一个简单的int64_t来表示时间,因为这使得时间计算变得非常简单,如果必须的话,转换回struct timevalstruct timespec也不成问题。即使您想要纳秒的精度,int64_t也可以表示近585年的跨度。如果你只需要几毫秒,你就有将近5.85亿年的时间跨度。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31275131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档