![](/img/trans.png)
[英]Is it ensured that 2 sequential std::chrono::steady_clock::now() will not be equal?
[英]How does std::chrono::steady_clock::now report errors?
这与我上一个问题有关 ,我问是否std::chrono::steady_clock::now
应该是noexcept
。 现在我知道我应该想知道这个函数如何报告错误? 例如,Linux上此函数的常见实现使用clock_gettime ,它可以返回错误。
Linux clock_gettime
工具可以报告的所有错误都不可能在std::chrono::steady_clock::now()
的调试实现中实现。
错误是:
int clock_gettime(clockid_t clk_id, struct timespec *tp);
EFAULT
tp指向可访问的地址空间之外。
在std::chrono::steady_clock::now()
没有用户提供的tp
出错。 如果std::chrono::steady_clock::now()
将错误的tp
传递给clock_gettime
,那么它只是一个容易修复的steady_clock
错误。
EINVAL
此系统不支持指定的clk_id。
在std::chrono::steady_clock::now()
没有用户提供的clk_id
出错。 如果std::chrono::steady_clock::now()
将错误的clk_id
传递给clock_gettime
,那么它只是一个必须修复的steady_clock
错误。
请注意, steady_clock
的实现不保证是可移植的,并且可能必须移植到任何给定的平台并进行正确性测试。 可能会发现在某些平台上, clock_gettime
无法实现steady_clock
。
EPERM
clock_settime()无权设置指示的时钟。
不适用于steady_clock
因为没有API来设置时间。
它没有。 API中没有用于错误报告的规定。 因此Linux实现必须在内部处理错误或不返回(例如,通过exit()
或std::terminate()
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.