0

我使用boost::io_service如下。

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

我想了解 post 是否正在排队我的请求、保证执行顺序或可以删除​​请求。我已经在 boost 文档中搜索了没有运气的答案。

4

1 回答 1

1

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

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

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

于 2013-09-16T15:24:06.660 回答