Rumah >pembangunan bahagian belakang >C++ >Bilakah Kaedah io_service::run() Boost.Asio Sekat atau Nyahsekat?
io_service::run() memulakan gelung peristiwa dan memproses acara rangkaian masuk dan keluar. Ia menyekat sehingga syarat tertentu dipenuhi:
Pengendali ialah panggilan balik yang digunakan oleh io_service untuk melaksanakan operasi tak segerak atau peristiwa proses. Operasi tak segerak, dimulakan menggunakan fungsi async_, mencipta kerja untuk io_service.
Menyekat Acara:
io_service::run( ) menghalang apabila ada kerja yang perlu dilakukan atau pengendali untuk dihantar. Contohnya:
Menyahsekat Acara:
io_service::run() nyahsekat apabila semua syarat berikut dipenuhi:
Apabila socket.async_receive() dipanggil, kerja ditambahkan pada io_service untuk membaca data daripada soket. io_service::run() akan menyekat sehingga data diterima atau ralat berlaku, menunggu panggilan balik handle_async_receive dipanggil.
Dalam Contoh 3a, io_service::work digunakan. Objek ini menghalang io_service daripada kehabisan kerja, memastikan bahawa utas yang melaksanakan io_service::run() akan terus berjalan. Apabila objek kerja dimusnahkan, io_service kehabisan kerja dan io_service::run() menyahsekat.
Secara amnya disyorkan untuk mengelakkan pencampuran operasi segerak dan tak segerak . Ini boleh menjadikan kod lebih kompleks dan sukar difahami. Operasi segerak boleh ditukar kepada tak segerak menggunakan fungsi async_ Boost.Asio.
Atas ialah kandungan terperinci Bilakah Kaedah io_service::run() Boost.Asio Sekat atau Nyahsekat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!