在boost::asio::io_service::run() 捕獲異常
在boost::asio 中,run()方法如果發生錯誤,io_service 類別的可以拋出boost::system::system_error 異常。確定是否處理此異常對於應用程式的正常運作至關重要。
處理異常的理由
文件指出從完成處理程序拋出的異常會被傳播。因此,建議根據您的應用程式來處理 run() 拋出的例外狀況。
建議方法
常見的方法是重複呼叫 run()直到它退出且沒有錯誤。以下程式碼範例說明了這種方法:
static void m_asio_event_loop(boost::asio::io_service& svc, std::string name) { for (;;) { try { svc.run(); break; // exited normally } catch (std::exception const &e) { logger.log(LOG_ERR) << "[eventloop] An unexpected error occurred running " << name << " task: " << e.what(); } catch (...) { logger.log(LOG_ERR) << "[eventloop] An unexpected error occurred running " << name << " task"; } } }
此程式碼片段將 run() 異常的處理封裝在循環內,確保事件循環繼續運行,直到它退出且沒有錯誤。有關io_service 中異常處理的更多文件可以在以下位置找到:
以上是我應該捕獲 boost::asio::io_service::run() 拋出的異常嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!