我有一个 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。请让我知道这个推理是否正确,任何想法表示赞赏。谢谢!