สับสนเมื่อ boost :: asio :: io_service เรียกใช้เมธอดบล็อก / ปลดบล็อก
ในฐานะที่เป็นผู้เริ่มต้น Boost ทั้งหมด Asio ฉันสับสนกับio_service::run(). ฉันจะขอบคุณถ้ามีใครสามารถอธิบายให้ฉันฟังได้เมื่อวิธีนี้บล็อก / ปลดบล็อก เอกสารระบุ: run()บล็อกฟังก์ชั่จนกว่าการทำงานทั้งหมดได้เสร็จสิ้นและมีรถขนไม่มากที่จะส่งหรือจนกว่าจะio_serviceได้รับการหยุด เธรดหลายเธรดอาจเรียกใช้run()ฟังก์ชันเพื่อตั้งค่ากลุ่มเธรดซึ่งio_serviceอาจเรียกใช้งานตัวจัดการ เธรดทั้งหมดที่รออยู่ในพูลจะเทียบเท่ากันและio_serviceอาจเลือกเธรดใดก็ได้เพื่อเรียกใช้ตัวจัดการ การออกจากrun()ฟังก์ชันปกติหมายความว่าio_serviceวัตถุหยุดทำงาน ( stopped()ฟังก์ชันจะคืนค่าจริง) โทรตามมาrun(), run_one(), poll()หรือจะกลับทันทีจนกว่าจะมีการเรียกร้องก่อนที่จะpoll_one()reset() ข้อความต่อไปนี้หมายถึงอะไร? [... ] ไม่มีตัวจัดการอีกต่อไปที่จะถูกส่ง [... ] ในขณะที่พยายามทำความเข้าใจพฤติกรรมของio_service::run()ฉันก็เจอตัวอย่างนี้(ตัวอย่างที่ 3a) ภายในนั้นฉันสังเกตว่าio_service->run()บล็อกนั้นและรอคำสั่งงาน // WorkerThread invines io_service->run() void WorkerThread(boost::shared_ptr<boost::asio::io_service> io_service); void CalculateFib(size_t); boost::shared_ptr<boost::asio::io_service> io_service( new boost::asio::io_service); boost::shared_ptr<boost::asio::io_service::work> work( new boost::asio::io_service::work(*io_service)); // ... boost::thread_group worker_threads; for(int x …