boost :: io_service :: post队列请求吗?

时间:2013-09-16 15:20:09

标签: c++ boost boost-asio

我正在使用boost::io_service,如下所示。

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

我想了解post是否正在排队我的请求,保证执行顺序或者可以请求被删除。我没有运气就搜索了增强文档中的答案。

1 个答案:

答案 0 :(得分:1)

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

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

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