boost::asio::io_service::run()
boost::asio::io_service::에서 발생한 예외 처리 run() 함수는 오류가 발생하면 Boost::system::system_error 예외를 발생시킵니다. 이로 인해 이러한 예외를 처리할지 여부와 처리 방법에 대한 의문이 제기됩니다.
예외 처리
예, Boost::asio::io_service에서 발생한 예외를 처리하는 것이 중요합니다. ::달리다(). 문서에서 언급했듯이 완료 핸들러에서 발생한 예외는 전파됩니다. 따라서 특정 애플리케이션 요구 사항에 따라 적절하게 처리해야 합니다.
예:
제공된 코드에서:
int main() { boost::asio::io_service queue; boost::asio::io_service::work work(queue); { // set some handlers... queue.run(); } // join some workers... return 0; }
여기, 처리기에서 발생한 예외는 포착되거나 처리되지 않습니다. 예외를 처리하려면 루프를 사용하여 오류 없이 종료될 때까지 io_service를 반복적으로 실행할 수 있습니다.
루프 및 재시도:
아래는 방법의 예입니다. io_service가 오류 없이 종료될 때까지 반복하고 재시도합니다.
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"; } } }
이 코드는 계속해서 io_service는 정상적으로 종료되거나 오류가 발생할 때까지 유지됩니다. 오류가 발생하면 예외를 기록하고 재시도합니다.
문서 참조:
boost::asio::에 의한 예외 처리에 대한 자세한 내용은 다음과 같습니다. io_service는 다음 문서 링크를 참조하세요.
위 내용은 Boost::asio::io_service::run()에서 발생한 예외를 올바르게 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!