std :: chrono :: steady_clock :: now如何报告错误?

时间:2013-08-07 17:26:04

标签: c++ c++11 error-handling chrono

这与my previous question有关,我询问std::chrono::steady_clock::nownoexcept是{{1}}。现在我知道我应该想知道这个函数如何报告错误?例如,Linux上使用此函数的常见实现 clock_gettime可能会返回错误。

2 个答案:

答案 0 :(得分:7)

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来设置时间。

答案 1 :(得分:1)

没有。 API中没有用于错误报告的规定。因此,Linux实现必须在内部处理错误或不返回(例如,通过exit()std::terminate())。