我有一个 GUI 连接并接收大量消息的应用程序,问题是它每隔一段时间就会收到一条乱序的消息。
该连接在单独的工作线程(单独的io_service
)上运行,并将send
函数(执行 a async__write
)io_service::wrap
作为回调公开,以供其他人使用字符串消息作为参数进行调用。(即callback = io_service_.wrap(boost::bind(&SomeGUIClass::send,this,_1));
),
所以要向 GUI 客户端发送一些东西,其他人调用- 它应该正确地在's 的队列callback(stringMessage)
上调度发送函数调用。io_service
在调用之前,消息的顺序是正确的,但我可以看到,有时它们在 write 调用之前callback
是无序的。callback
我的推理: wrap 转换为 adispatch
将尝试调用已包装的 fn。内callback
(如果它可以满足线程安全保证),如果不能,则将其安排在以后。因此,有时较早的消息会被安排用于稍后的写入,而最新的消息会得到处理,因为 dispatch 能够在同一时间处理它callback
。请让我知道这个推理是否正确,任何想法表示赞赏。谢谢!