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 都定义为“长字”。
最佳答案
我认为这实际上只是 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/
我在Windows上使用带有DevKit的Ruby1.9.3(在Win764位上都是32位)。现在我尝试安装rails,但从bundle中得到一个错误。如果我尝试运行(包在提示什么)geminstalljson我收到以下错误消息:D:\RubyTest>geminstalljsonTemporarilyenhancingPATHtoincludeDevKit...Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingjson:ERROR:Failedtobuildgemnativeextension.D:
这个答案很难找到,我觉得很奇怪。我已经包含了time.h和ctime,但是vc9仍然提示未定义的类型“timespec”。我在这里、MSDN和网络上进行了搜索(即使存在确切的编译器错误),但我找不到答案……也许它只是在噪音中迷失了方向。这是确切的错误:errorC2027:useofundefinedtype'timespec'谢谢 最佳答案 structtimespec来自posix,通常在unix上找到,但在windows上找不到。 关于windows-Windows中没有定义tim
structtimeval和structtimespec除了精度不同之外还有什么区别?如果我需要的精度低于µs(例如,毫秒),我为什么要使用一个而不是另一个?在我的编译器上(ARM的gcc):/*POSIX.1bstructureforatimevalue.Thisislikea`structtimeval'buthasnanosecondsinsteadofmicroseconds.*/structtimespec{__time_ttv_sec;/*Seconds.*/__syscall_slong_ttv_nsec;/*Nanoseconds.*/};/*Atimevaluetha
structtimeval和structtimespec除了精度不同之外还有什么区别?如果我需要的精度低于µs(例如,毫秒),我为什么要使用一个而不是另一个?在我的编译器上(ARM的gcc):/*POSIX.1bstructureforatimevalue.Thisislikea`structtimeval'buthasnanosecondsinsteadofmicroseconds.*/structtimespec{__time_ttv_sec;/*Seconds.*/__syscall_slong_ttv_nsec;/*Nanoseconds.*/};/*Atimevaluetha
在计时功能中,time,clockgetrusage,clock_gettime,gettimeofday和timespec_get,我想清楚地了解它们是如何实现的以及它们的返回值是什么,以便知道我必须在哪种情况下使用它们。首先我们需要对返回的函数进行分类挂钟值与返回的函数进行比较进程或线程值.gettimeofday返回挂钟值,clock_gettime返回挂钟值或进程或线程值取决于Clock传递给它的参数。getrusage和clock返回过程值。然后第二个问题是关于这些功能的实现,因此,它们的准确性。这些功能使用哪种硬件或软件机制。看来getrusage仅使用内核滴答(通常为1毫
在计时功能中,time,clockgetrusage,clock_gettime,gettimeofday和timespec_get,我想清楚地了解它们是如何实现的以及它们的返回值是什么,以便知道我必须在哪种情况下使用它们。首先我们需要对返回的函数进行分类挂钟值与返回的函数进行比较进程或线程值.gettimeofday返回挂钟值,clock_gettime返回挂钟值或进程或线程值取决于Clock传递给它的参数。getrusage和clock返回过程值。然后第二个问题是关于这些功能的实现,因此,它们的准确性。这些功能使用哪种硬件或软件机制。看来getrusage仅使用内核滴答(通常为1毫