Mengendalikan Pengecualian yang Dilemparkan oleh rangsangan::asio::io_service::run()
Rancangan::asio::io_service:: fungsi run() melontarkan pengecualian::system::system_error apabila menghadapi ralat. Ini menimbulkan persoalan sama ada dan cara mengendalikan pengecualian ini.
Mengendalikan Pengecualian
Ya, adalah penting untuk mengendalikan pengecualian yang dilemparkan oleh boost::asio::io_service ::lari(). Seperti yang dinyatakan dalam dokumentasi, pengecualian yang dilemparkan daripada pengendali penyiapan disebarkan. Oleh itu, ia mesti dikendalikan dengan sewajarnya berdasarkan keperluan aplikasi khusus.
Contoh:
Dalam kod yang anda berikan:
int main() { boost::asio::io_service queue; boost::asio::io_service::work work(queue); { // set some handlers... queue.run(); } // join some workers... return 0; }
Di sini, pengecualian yang dilemparkan oleh pengendali tidak akan ditangkap atau dikendalikan. Untuk mengendalikan pengecualian, anda boleh menggunakan gelung untuk menjalankan io_service berulang kali sehingga ia keluar tanpa ralat.
Gelung dan Cuba Semula:
Di bawah ialah contoh cara untuk gelung dan cuba semula sehingga io_service keluar tanpa ralat:
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"; } } }
Kod ini terus menjalankan io_service sehingga ia keluar seperti biasa atau menghadapi ralat. Dalam kes ralat, ia mencatat pengecualian dan cuba semula.
Rujukan Dokumentasi:
Untuk maklumat lanjut tentang pengendalian pengecualian melalui rangsangan::asio:: io_service, rujuk pautan dokumentasi berikut:
Atas ialah kandungan terperinci Bagaimana Mengendalikan Pengecualian yang Dilemparkan dengan cara boost::asio::io_service::run() dengan betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!