Maison >développement back-end >C++ >Comment gérer correctement les exceptions levées par boost::asio::io_service::run() ?
Gestion des exceptions levées par boost::asio::io_service::run()
Le boost::asio::io_service:: La fonction run() lève une exception boost::system::system_error lorsqu'elle rencontre des erreurs. Cela soulève la question de savoir si et comment gérer ces exceptions.
Gestion des exceptions
Oui, il est crucial de gérer les exceptions levées par boost::asio::io_service ::courir(). Comme mentionné dans la documentation, les exceptions levées par les gestionnaires d'achèvement sont propagées. Par conséquent, ils doivent être traités de manière appropriée en fonction des exigences spécifiques de l'application.
Exemple :
Dans le code fourni :
int main() { boost::asio::io_service queue; boost::asio::io_service::work work(queue); { // set some handlers... queue.run(); } // join some workers... return 0; }
Ici, une exception levée par les gestionnaires ne sera ni interceptée ni gérée. Pour gérer les exceptions, vous pouvez utiliser une boucle pour exécuter le io_service à plusieurs reprises jusqu'à ce qu'il se termine sans erreur.
Boucler et réessayer :
Vous trouverez ci-dessous un exemple de la façon de bouclez et réessayez jusqu'à ce que le io_service se termine sans erreur :
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"; } } }
Ce code continue d'exécuter le io_service jusqu'à ce qu'il se termine normalement ou rencontre une erreur. En cas d'erreur, il enregistre l'exception et réessaye.
Référence de la documentation :
Pour plus d'informations sur la gestion des exceptions par boost::asio:: io_service, reportez-vous au lien de documentation suivant :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!