我试图了解io_service的poll()/poll_one()与run()/run_one()之间的区别。文档中所述的区别在于poll()执行就绪的处理程序,而不是run()执行任何处理程序。

但是在boost文档中,我找不到“就绪处理程序”的定义。

这个问题的有效答案是可以(最好通过代码示例)显示就绪处理程序和未就绪处理程序之间的差异以及poll()和run()执行它的方式之间的差异。

谢谢。

最佳答案

int main()
{
    boost::asio::io_service io_service;
    boost::asio::deadline_timer timer(io_service);

    timer.expires_from_now(boost::posix_time::seconds(5));
    timer.async_wait([](const boost::system::error_code& err)
                     { std::cout << (err ? "error" : "okay")
                     ;});

    //io_service.poll_one();
    io_service.run_one();
}

如果使用io_service.poll_one();,则很可能看不到任何输出,因为计时器尚未过去。 ready handler只是意味着可以运行的句柄(例如,当计时器过去或操作完成时等)。但是,如果使用io_service.run_one();,则此调用将一直阻塞,直到计时器完成并执行处理程序。

关于c++ - boost::asio::io_service ready处理程序的定义是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14578102/

10-15 06:06