- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 clock_gettime()
命令并尝试将给定的毫秒数附加到我从中获取的 timespec
。我可以这样做吗?
//milli is an int that can be any number (within reason)
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_nesc += (milli*1000000);
或者我是否需要将它拆分并首先找出是否有任何整秒,将它们添加到 tv_sec
字段,然后将剩余的添加到 tv_nsec
?
本质上,tv_nsec
字段是否可以存储超过 1 秒的纳秒?
最佳答案
这完全取决于您要用它做什么。
struct timespec
的tv_nsec
成员是long
类型。您可以将其设置为 LONG_MIN
到 LONG_MAX
范围内的任何值。如果您执行的计算超过 LONG_MAX
,至少为 231-1,那么您将遇到问题(未定义的行为可能 显示为环绕的值)。
将其设置为小于 0 或大于或等于 10 亿的值是否会导致问题取决于您如何处理它。如果您只想打印它,或对其执行一些计算,任何有效的 long
值都应该没问题——但如果您将它们标准化,存储的值可能更有用。
clock_gettime()
应该始终为您提供 0..999999999 范围内的 tv_nsec
值。
POSIX 要求clock_settime()
、clock_nanosleep()
和nanosleep()
函数失败,并设置errno
到 EINVAL
,如果“tp 参数指定了一个小于零或大于或等于 10 亿的纳秒值。”
引用资料:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_settime.html http://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_nanosleep.html http://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html
关于timespec 在 tv_nsec 字段中可以有超过 1 秒的纳秒值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17114385/
根据这个问题:Fractional power of units of measures in F# F# 中的度量单位不支持分数幂。 在我的应用程序中,有时考虑带有度量前缀的数据是有益的,例如当处理
我是一名优秀的程序员,十分优秀!