我想实现简单的网络协议。消息通过套接字发送,并在超时毫秒内收到回复。这里出现的问题是如何在timeout处理程序和async_read_until处理程序之间设置顺序。不幸的是,股票在这里没有多大帮助:
http://www.boost.org/doc/libs/1_43_0/doc/html/boost_asio/reference/io_service__strand.html
请注意,在以下情况中:
async_op_1(..., s.wrap(a)); async_op_2(..., s.wrap(b));
完成第一个异步操作将执行 s.dispatch(a),第二个将执行s.dispatch(b),但是 执行这些操作的顺序是未指定的。也就是说,你做不到 说明一个是否发生在另一个之前。因此没有 符合上述条件且不作出订购保证。
想象一下,io_service io
在许多不同的处理程序,操作等之间共享。然后,在时间段 A 和 B io.run()
之间将运行一些与此特定套接字操作无关的处理函数。然后,操作系统可以在 C 时接收实际数据,其中 A < C <的乙即可。
此外,计时器可以在 D 的时刻到期,其 A < D <的乙即可。两个此事件:数据接收 C 和计时器到期 D 将在io.run()
完成当前处理程序作业但不早于时间 B时检测到
我想要的是保留处理程序调用顺序,即async_read处理程序在async_wait处理程序之前被调用当且仅当 C <的 d 即可。 否则,我可能会在超时截止日期之前实际获得数据时结束这种情况,但是随着时间的推移而被丢弃。