繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM