草庐IT

c timeval 与 timespec

coder 2023-06-17 原文

struct timevalstruct 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 都定义为“长字”。

最佳答案

我认为这实际上只是 API [in] 兼容性的问题。 POSIX-y 调用类似 pselect()clock_gettime()使用 struct timespec。各种文件系统调用,如 utimes() ,以及一些类似 gettimeofday() 的 Linux 调用和 select() , 使用 struct timeval。从几个手册页中大致概括,我怀疑 struct timeval 具有 BSD 遗留而 struct timespec 是 POSIX。

如果您正在进行间隔测量,则没有理由不利用 clock_gettime() 的额外精度 — 尽管请注意通常是硬件而非头文件限制了您的测量精度。出于显示目的而除以一百万与除以一千相比几乎没有好坏之分。 (另外,Mac OS X prior to 10.12 did not support clock_gettime()。)

但如果您要进行大量文件时间操作,则使用 utimes() 等 API 中使用的 struct timeval 可能更有意义。 struct timeval 在 Linux、BSD 和 Mac OS X 上也有一些比较函数,例如timercmp()timersub()(再次参见手册页)。

我会根据您打算使用的 API 做出决定,而不是根据结构本身。 (或者在必要时编写一个带有转换方法的包装类。)

关于c timeval 与 timespec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31275131/

有关c timeval 与 timespec的更多相关文章

  1. ruby-on-rails - gem install json 失败,重新定义了 struct timezone/timespec - 2

    我在Windows上使用带有DevKit的Ruby1.9.3(在Win764位上都是32位)。现在我尝试安装rails,但从bundle中得到一个错误。如果我尝试运行(包在提示什么)geminstalljson我收到以下错误消息:D:\RubyTest>geminstalljsonTemporarilyenhancingPATHtoincludeDevKit...Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingjson:ERROR:Failedtobuildgemnativeextension.D:

  2. windows - Windows 中没有定义 timespec 吗? - 2

    这个答案很难找到,我觉得很奇怪。我已经包含了time.h和ctime,但是vc9仍然提示未定义的类型“timespec”。我在这里、MSDN和网络上进行了搜索(即使存在确切的编译器错误),但我找不到答案……也许它只是在噪音中迷失了方向。这是确切的错误:errorC2027:useofundefinedtype'timespec'谢谢 最佳答案 structtimespec来自posix,通常在unix上找到,但在windows上找不到。 关于windows-Windows中没有定义tim

  3. c timeval 与 timespec - 2

    structtimeval和structtimespec除了精度不同之外还有什么区别?如果我需要的精度低于µs(例如,毫秒),我为什么要使用一个而不是另一个?在我的编译器上(ARM的gcc):/*POSIX.1bstructureforatimevalue.Thisislikea`structtimeval'buthasnanosecondsinsteadofmicroseconds.*/structtimespec{__time_ttv_sec;/*Seconds.*/__syscall_slong_ttv_nsec;/*Nanoseconds.*/};/*Atimevaluetha

  4. c timeval 与 timespec - 2

    structtimeval和structtimespec除了精度不同之外还有什么区别?如果我需要的精度低于µs(例如,毫秒),我为什么要使用一个而不是另一个?在我的编译器上(ARM的gcc):/*POSIX.1bstructureforatimevalue.Thisislikea`structtimeval'buthasnanosecondsinsteadofmicroseconds.*/structtimespec{__time_ttv_sec;/*Seconds.*/__syscall_slong_ttv_nsec;/*Nanoseconds.*/};/*Atimevaluetha

  5. c - 在 Linux 中测量时间 - 时间 vs 时钟 vs getrusage vs clock_gettime vs gettimeofday vs timespec_get? - 2

    在计时功能中,time,clockgetrusage,clock_gettime,gettimeofday和timespec_get,我想清楚地了解它们是如何实现的以及它们的返回值是什么,以便知道我必须在哪种情况下使用它们。首先我们需要对返回的函数进行分类挂钟值与返回的函数进行比较进程或线程值.gettimeofday返回挂钟值,clock_gettime返回挂钟值或进程或线程值取决于Clock传递给它的参数。getrusage和clock返回过程值。然后第二个问题是关于这些功能的实现,因此,它们的准确性。这些功能使用哪种硬件或软件机制。看来getrusage仅使用内核滴答(通常为1毫

  6. c - 在 Linux 中测量时间 - 时间 vs 时钟 vs getrusage vs clock_gettime vs gettimeofday vs timespec_get? - 2

    在计时功能中,time,clockgetrusage,clock_gettime,gettimeofday和timespec_get,我想清楚地了解它们是如何实现的以及它们的返回值是什么,以便知道我必须在哪种情况下使用它们。首先我们需要对返回的函数进行分类挂钟值与返回的函数进行比较进程或线程值.gettimeofday返回挂钟值,clock_gettime返回挂钟值或进程或线程值取决于Clock传递给它的参数。getrusage和clock返回过程值。然后第二个问题是关于这些功能的实现,因此,它们的准确性。这些功能使用哪种硬件或软件机制。看来getrusage仅使用内核滴答(通常为1毫

随机推荐