Rumah > pembangunan bahagian belakang > C++ > Sekiranya Anda Menangkap Pengecualian yang Dilemparkan oleh rangsangan::asio::io_service::run()?

Sekiranya Anda Menangkap Pengecualian yang Dilemparkan oleh rangsangan::asio::io_service::run()?

DDD
Lepaskan: 2024-12-15 01:07:12
asal
486 orang telah melayarinya

Should You Catch Exceptions Thrown by boost::asio::io_service::run()?

Perlukah Pengecualian Dilemparkan oleh rangsangan::asio::io_service::run() Ditangkap?

Masalah:

boost::asio::io_service::run() boleh membuang boost::system::system_error exception jika ralat berlaku semasa pelaksanaan. Adalah penting untuk mempertimbangkan sama ada pengecualian ini perlu dikendalikan.

Jawapan:

Ya, pengecualian harus dikendalikan.

Penjelasan:

Mengikut dokumentasi rangsangan, pengecualian yang dilemparkan daripada pengendali penyiapan ialah disebarkan. Oleh itu, pengecualian yang dilemparkan oleh run() harus dikendalikan dengan sewajarnya untuk aplikasi tertentu.

Dalam banyak kes, disyorkan untuk menggelung dan mengulang run() sehingga ia keluar tanpa ralat. Ini memastikan operasi berterusan melainkan ralat tidak boleh dipulihkan berlaku.

Contoh Kod Pengendalian:

Contoh pengendalian pengecualian yang dilemparkan oleh run() dalam gelung:

void asio_event_loop(boost::asio::io_service& svc, std::string name) {
    while (true) {
        try {
            svc.run();
            break;
        } catch (std::exception const &e) {
            std::cout << "[eventloop] An unexpected error occurred running " << name << " task: " << e.what() << std::endl;
        } catch (...) {
            std::cout << "[eventloop] An unexpected error occurred running " << name << " task" << std::endl;
        }
    }
}
Salin selepas log masuk

Pautan Dokumentasi:

Untuk lebih lanjut maklumat, rujuk dokumentasi Boost: 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 Sekiranya Anda Menangkap Pengecualian yang Dilemparkan oleh rangsangan::asio::io_service::run()?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan