这与我之前询问是否std::chrono::steady_clock::now
应该是的问题有关noexcept
。现在我知道我应该想知道这个函数如何报告错误?例如,此函数在 Linux 上的常见实现使用
可能返回错误的clock_gettime 。
2 回答
clock_gettime
Linux工具可能报告的所有错误在std::chrono::steady_clock::now()
.
错误是:
int clock_gettime(clockid_t clk_id, struct timespec *tp);
EFAULT
tp 指向可访问地址空间之外。
没有用户提供tp
在std::chrono::steady_clock::now()
. 如果std::chrono::steady_clock::now()
将错误传递tp
给clock_gettime
,这只是一个steady_clock
很容易修复的错误。
EINVAL
此系统不支持指定的 clk_id。
没有用户提供clk_id
在std::chrono::steady_clock::now()
. 如果std::chrono::steady_clock::now()
将错误传递clk_id
给clock_gettime
,那只是一个steady_clock
必须修复的错误。
请注意,steady_clock
不保证 的实现是可移植的,并且可能必须移植到任何给定平台并进行正确性测试。结果可能steady_clock
无法clock_gettime
在某些平台上实现。
EPERM
clock_settime() 无权设置指示的时钟。
不适用,steady_clock
因为没有设置时间的 API。
它没有。API 中没有提供错误报告。因此,Linux 实现必须要么在内部处理错误,要么不返回(例如,通过exit()
或std::terminate()
)。