关于何时在 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 - 知道何时必须关闭/关闭连接

关于创建 boost.asio async_xxxx 处理程序对象

boost::asio::async_accept 处理程序未被调用

C++ - 几个 Boost.Asio 相关问题

boost:asio::async_write:数据已发送但未调用处理程序

使用 boost::asio::spawn 生成的 asio 处理程序中的 boost::property_tree::read_xml 段错误