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
208 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!

sumber:php.cn
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