Rumah >pembangunan bahagian belakang >C++ >Patutkah Saya Menangkap Pengecualian yang Dilemparkan oleh rangsangan::asio::io_service::run()?
Menangkap Pengecualian dalam rangsangan::asio::io_service::run()
Dalam rangsangan::asio, kaedah run() daripada kelas io_service boleh melontarkan pengecualian::system::system_error sekiranya berlaku ralat. Menentukan sama ada untuk mengendalikan pengecualian ini adalah penting untuk aplikasi anda berfungsi dengan betul.
Justifikasi untuk Mengendalikan Pengecualian
Dokumentasi menyatakan bahawa pengecualian yang dilemparkan daripada pengendali penyiapan disebarkan . Oleh itu, adalah dinasihatkan untuk mengendalikan pengecualian yang dilemparkan oleh run() mengikut kesesuaian untuk aplikasi anda.
Pendekatan Disyorkan
Pendekatan biasa ialah memanggil berulang kali run() sehingga ia keluar tanpa ralat. Contoh kod berikut menggambarkan pendekatan ini:
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"; } } }
Coretan kod ini merangkumi pengendalian pengecualian run() dalam gelung, memastikan gelung acara terus berjalan sehingga ia keluar tanpa ralat. Dokumentasi lanjut mengenai pengendalian pengecualian dalam io_service boleh didapati di:
Atas ialah kandungan terperinci Patutkah Saya Menangkap Pengecualian yang Dilemparkan oleh rangsangan::asio::io_service::run()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!