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