关于何时在 Boost.Asio 中调用处理程序
Posted
技术标签:
【中文标题】关于何时在 Boost.Asio 中调用处理程序【英文标题】:About when it is called a handler in Boost.Asio 【发布时间】:2015-06-10 18:06:29 【问题描述】:我正在学习 Boost.Asio。在文档中我们可以看到以下内容:
异步完成处理程序只会从线程调用 当前正在调用 io_service::run()。
我只有一个线程(主线程)。在那个线程中,我调用了io_service::run()
函数。
假设当Asio调用handler时线程正忙。
处理程序是否被调用?等待线程?被忽略了吗?
谢谢
【问题讨论】:
如果io_service::run
在一个线程中执行,所有的处理程序都会被依次调用——一个接一个。因此,如果一个处理程序需要太多时间才能完成,其他处理程序就会在队列中等待。
感谢您的回复。我错了,我不能删除问题。
【参考方案1】:
好吧,我错了。
处理程序总是会被调用,因为您调用了以下函数之一:run()、run_one()、poll() 或 poll_one()
我的代码错了。我将 run_one() 函数与计时器一起使用。计时器出现故障。
【讨论】:
以上是关于关于何时在 Boost.Asio 中调用处理程序的主要内容,如果未能解决你的问题,请参考以下文章
关于创建 boost.asio async_xxxx 处理程序对象
boost::asio::async_accept 处理程序未被调用
boost:asio::async_write:数据已发送但未调用处理程序
使用 boost::asio::spawn 生成的 asio 处理程序中的 boost::property_tree::read_xml 段错误