Behandeln von Ausnahmen in Boost.Asios io_service::run()
Die io_service::run()-Methode von Boost.Asio spielt eine wichtige Rolle in der asynchronen Ereignisverarbeitung. Es löst jedoch auch eine boost::system::system_error-Ausnahme aus, wenn Fehler auftreten. Es stellt sich die Frage, ob es ratsam ist, diese Ausnahme abzufangen.
Sollten Sie die Ausnahme abfangen?
Ja, es wird dringend empfohlen, die von io_service ausgelöste Ausnahme zu behandeln:: laufen(). Gemäß der Dokumentation werden von Abschlusshandlern ausgelöste Ausnahmen weitergegeben. Das Ignorieren kann zu falschem Programmverhalten oder zur Beendigung führen.
So behandeln Sie die Ausnahme
In den meisten Fällen besteht ein geeigneter Ansatz darin, den io_service in einer Schleife auszuführen und bis zum nächsten Schritt fortzusetzen es wird ohne Fehler beendet. Der folgende Codeausschnitt stellt ein Beispiel dar:
static void asio_event_loop(boost::asio::io_service& svc, std::string name) { for (;;) { try { svc.run(); break; // Exited normally } catch (std::exception const &e) { // Log error and handle appropriately } catch (...) { // Handle unknown exceptions as well } } }
Referenzdokumentation
Weitere Details finden Sie in der Boost.Asio-Dokumentation unter:
http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/reference/io_service.html#boost_asio.reference.io_service.effect_of_exclusions_thrown_from_handlers
Das obige ist der detaillierte Inhalt vonSollten Sie Ausnahmen abfangen, die von io_service::run() von Boost.Asio ausgelöst werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!