C++ boost::io_服务::发送队列请求吗?

C++ boost::io_服务::发送队列请求吗?,c++,boost,boost-asio,C++,Boost,Boost Asio,我使用的是如下所示的boost::io_服务 boost::io_service service; service.post(boost::bind(...)); service.post(boost::bind(...)); service.post(boost::bind(...)); 我想了解post是在排队等待我的请求,保证执行顺序,还是可以删除请求。我已经在boost文档中搜索了答案,但运气不佳。否,默认情况下执行顺序不受保证 当回调被发布到一个io\u服务时,只要底层io\u服务被

我使用的是如下所示的
boost::io_服务

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

我想了解post是在排队等待我的请求,保证执行顺序,还是可以删除请求。我已经在boost文档中搜索了答案,但运气不佳。

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

当回调被发布到一个
io\u服务时,只要底层
io\u服务被某个线程主动轮询(使用以下函数之一:
run()
run\u one()
poll()
poll(),
poll\u one()
),该回调将在“适当的时间”被调用


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

否,执行顺序不保证。@Chad这是个好消息,这是否意味着我的请求永远不会被丢弃?只要某个线程正在轮询底层的
io\u服务
(通过
run()
poll()
run\u one()
poll\u one()
),就会在适当的时间调用回调。“正在轮询”这意味着它排队了,如果调用
poll\u one()
三次,所有三个请求都会触发,假设它们不是无限循环。这意味着它排队了,如果我调用
poll\u one()
三次,所有三个请求都会触发,假设它们不是无限循环。@andre:没有保证的执行顺序,如果调用了三次
poll\u one()
,则保证调用三个已发布的处理程序,处理程序返回(没有无限循环),并且处理程序不会将更多的处理程序发布到
io\u服务中。