Heim >Backend-Entwicklung >C++ >Wie gehe ich mit von boost::asio::io_service::run() ausgelösten Ausnahmen richtig um?
Behandlung von Ausnahmen, die von boost::asio::io_service::run() ausgelöst werden
Der boost::asio::io_service:: Die Funktion run() löst bei Fehlern eine boost::system::system_error-Ausnahme aus. Dies wirft die Frage auf, ob und wie mit diesen Ausnahmen umgegangen werden soll.
Behandlung von Ausnahmen
Ja, es ist wichtig, von boost::asio::io_service ausgelöste Ausnahmen zu behandeln ::laufen(). Wie in der Dokumentation erwähnt, werden die von Abschlusshandlern ausgelösten Ausnahmen weitergegeben. Daher müssen sie entsprechend den spezifischen Anwendungsanforderungen angemessen gehandhabt werden.
Beispiel:
In Ihrem bereitgestellten Code:
int main() { boost::asio::io_service queue; boost::asio::io_service::work work(queue); { // set some handlers... queue.run(); } // join some workers... return 0; }
Hier: Eine von den Handlern ausgelöste Ausnahme wird nicht abgefangen oder behandelt. Um die Ausnahmen zu behandeln, können Sie eine Schleife verwenden, um den io_service wiederholt auszuführen, bis er ohne Fehler beendet wird.
Schleife und erneut versuchen:
Unten finden Sie ein Beispiel dafür Schleife und wiederholen Sie den Vorgang, bis der io_service ohne Fehler beendet wird:
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"; } } }
Dieser Code führt den io_service so lange aus, bis er beendet wird wird normal beendet oder es tritt ein Fehler auf. Im Fehlerfall protokolliert es die Ausnahme und versucht es erneut.
Dokumentationsreferenz:
Weitere Informationen zur Behandlung von Ausnahmen durch boost::asio:: io_service, siehe folgenden Dokumentationslink:
Das obige ist der detaillierte Inhalt vonWie gehe ich mit von boost::asio::io_service::run() ausgelösten Ausnahmen richtig um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!