我正在使用boost::io_service
,如下所示。
boost::io_service service;
service.post(boost::bind(...));
service.post(boost::bind(...));
service.post(boost::bind(...));
我想了解post是否正在排队我的请求,保证执行顺序或者可以请求被删除。我没有运气就搜索了增强文档中的答案。
答案 0 :(得分:1)
不,默认情况下不保证执行顺序。
当回调发布到io_service
时,只要基础io_service
被某个线程主动轮询(使用以下之一),就会在“适当的时间”调用该回调函数:run()
,run_one()
,poll()
,poll_one()
)。
某些可以发布的命令可能永远不会返回(例如,套接字上的异步读取,其中没有数据发送)。这些类型的异步操作通常会为可以检查的回调提供错误代码。在某些情况下,此错误代码将提供有关操作成功(或失败)的详细信息。在上面引用的示例中,如果底层套接字关闭,挂起的异步读取将使用错误代码“operation aborted”执行其回调。