Rumah > pembangunan bahagian belakang > C++ > Bagaimana Mengendalikan Pengecualian yang Dilemparkan dengan cara boost::asio::io_service::run() dengan betul?

Bagaimana Mengendalikan Pengecualian yang Dilemparkan dengan cara boost::asio::io_service::run() dengan betul?

Susan Sarandon
Lepaskan: 2024-12-08 15:46:10
asal
271 orang telah melayarinya

How to Properly Handle Exceptions Thrown by boost::asio::io_service::run()?

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;
}
Salin selepas log masuk

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";
        }
    }
}
Salin selepas log masuk

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:

  • [Kesan pengecualian yang dilemparkan daripada pengendali](http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio/reference/io_service.html#boost_asio.reference.io_service.effect_of_exceptions_thrown_from_handlers)

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan