c++ - 是否 boost::io_service::post 队列请求?

标签 c++ boost boost-asio

我正在使用 boost::io_service 如下。

boost::io_service service;
service.post(boost::bind(...));
service.post(boost::bind(...));
service.post(boost::bind(...));

我想了解 post 是否正在对我的请求进行排队、保证执行顺序或是否可以删除请求。我在 boost 文档中搜索了答案,但没有找到答案。

最佳答案

不,默认情况下不保证执行顺序。

当回调被发布到 io_service 时,只要底层 io_service 正在被某个线程主动轮询,该回调就会在“适当的时间”被调用(使用以下函数之一:run()run_one()poll()poll_one()).

一些可以发布的命令可能永远不会返回(例如套接字上的异步读取,其中永远不会发送任何数据)。这些类型的异步操作通常会向可以检查的回调提供错误代码。在某些情况下,此错误代码将提供有关操作成功(或失败)的详细信息。在上面引用的示例中,如果底层套接字已关闭,挂起的异步读取将执行其回调,并显示错误代码“操作中止”。

关于c++ - 是否 boost::io_service::post 队列请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831614/

相关文章:

C++/Boost 文件系统 - 检测到 '_MSC_VER' 不匹配 : value '1700' doesn't match value '1600'

linux - boost 安装

c++ - 指向不同返回类型和签名的函数的指针映射

c++ - 编写 tcp 服务器——缓冲流

c++ - lambda 的捕获变量被重置

C++ 对象赋值给 NULL

c++ - 链如何保证boost.asio中未决事件的正确执行

c++ - 如何根据条件声明一个对象并使其在函数的其余部分可用?

c++ - 如何在一个数组/容器中使用不同的对象?

c++ - Boost asio、async_read 和 acync_write 不调用回调