- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
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/
我如何知道从 1970 年 1 月 1 日 00:00:00 到现在使用 timeval 之间的秒数和微秒数?谢谢。 struct timeval { long tv_sec; /*seconds
我想将 timeval 结构从秒转换为纳秒,实现此目的的最佳算法是什么? 最佳答案 我建议这样做: uint64_t nanosec(struct timeval t) { /* Calculate
我在将 time_t 转换为 struct timeval 时遇到问题。我需要从 time_t 值填充 tv_usec 和 tv_sec 值。 为了填充tv_sec和tv_usec,我们需要调用get
我正在尝试打印 struct timeval 变量中的值,如下所示: int main() { struct timeval *cur; do_gettimeofday(cur)
我正在尝试将这两个组件从时间结构中拉出并将它们放入字符串中。 我运气不太好。我尝试先将其转换为长整数,然后再转换为字符串。我需要最有效的方法来执行此操作。 有什么想法吗?我不想首先转换为另一个数据结构
我需要使用两个 integer 参数 p1 和 p2 来表示 timeval 结构。我已将 tv_sec 复制到 p1 并将 tv_usec 复制到 p2。在 32 位 (centos) 中 size
通过下面的代码,我可以获得以毫秒为单位的当前时间。现在我想将毫秒添加到系统时间。有什么提示吗? #include #include int main (int argc, char** argv)
如何将 timeval 转换为 time_t?我正在尝试转换:umtp->ut_tv 到 time_t 这样我就可以使用 difftime(a,b)。 struct { int32_t tv_s
struct timeval 和 struct timespec 除了精度不同之外还有什么区别?如果我需要的精度低于 µs(例如,毫秒),我为什么要使用一个而不是另一个? 在我的编译器上(ARM 的
我希望将 timeval 字段附加到我的自定义数据包 header 中。面临类型转换的问题。 标题中我的自定义字段 struct pkthdr { uint64_t sec; uint
我试图查看选择函数监视文件所花费的时间,但是当我尝试打印它时,我得到一个很长的数字。这是代码: struct timeval to; to.tv_usec=25; nfds=select(maxfds
我正在使用 timeval 结构来获取当前系统时间。通常如果我这样声明: timeval curtime; 它正在工作。但是我看到一些代码,人们将其声明为: struct timeval curtim
我有一个 struct timespec我需要转换为 struct timeval 的对象用于 lutimes(...) . 我尝试了以下操作,但是 lutimes()提示。 const struct
我在下面有一个片段 - 我已经以多种方式调整了我的 tv_usec,但是我一直坐在 select() 循环中几乎整整 10 秒,无论tv_usec 的设置。 char buffer[512];
我正在使用 timersub(struct timeval *a, struct timeval *b, struct timeval *res) 来按时进行操作。而我要做的是,用一个较高的值减去一个
我搜索了一些问题 using time.h获得random种子 initialization .特别是在我的例子中,我想放置 time在主函数之外。 根据评论我做了一些修改。在 include as
我在这个程序中有一个错误,我不断地回到这两个函数,但它们对我来说是正确的。这里有什么问题吗? long visual_time_get_msec(VisTime *time_) { visua
我正在测试是否可以使用 gettimeofday() 来衡量一段代码的性能。 #include #include #include int main() { struct timeval *
我正在从 Linux 内核读取(触摸)事件。我想记录这些事件的时间,但我不知道这些事件是作为 timespec 还是 timeval 传递的。谁能指出我正确的方向? 示例代码(从缓冲区读取事件后) s
看完this article关于运行时间,我写了一个简单的代码来计算一个循环的执行时间: #include #include int main (int argc, char** argv) {
我是一名优秀的程序员,十分优秀!