簡體   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