当boost :: asio :: io_service运行方法阻塞/取消阻塞时感到困惑
作为Boost.Asio的初学者,我对感到困惑io_service::run()。如果有人可以向我解释此方法的阻止/取消阻止,我将不胜感激。文档指出: 该run()函数将阻塞,直到所有工作完成并且不再有要分派的处理程序,或者直到io_service停止为止。 多个线程可以调用该run()函数来建立线程池,线程池io_service可以从中执行处理程序。池中等待的所有线程都是等效的,并且io_service可以选择其中任何一个来调用处理程序。 从该run()函数正常退出意味着该io_service对象已停止(该stopped()函数返回true)。后续调用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 = 0; x < 2; ++x) { worker_threads.create_thread(boost::bind(&WorkerThread, io_service)); } io_service->post( boost::bind(CalculateFib, 3)); io_service->post( boost::bind(CalculateFib, 4)); io_service->post( boost::bind(CalculateFib, 5)); work.reset(); …