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服务中。