我有一个GUI连接并接收大量消息的应用程序,问题是每隔一段时间它就会收到一个无序的消息。
连接在单独的工作线程(单独的io_service
)上运行,并通过send
公开async__write
函数(执行io_service::wrap
)作为其他人的回调使用字符串消息作为参数调用。 (即callback = io_service_.wrap(boost::bind(&SomeGUIClass::send,this,_1));
),
所以要向GUI客户端发送内容,其他人调用callback(stringMessage)
- 这应该正确地在io_service
的队列上调度发送函数调用。
callback
之前,消息的顺序正确,但我可以看到有时它们在callback
内,在写入调用之前就已经出现故障。
我的推理:换行转换为dispatch
,它会尝试调用包装的fn。在callback
内(如果它可以满足线程安全保证),如果不能,则将其安排在以后。
因此,有时早期的消息会被安排用于稍后的写入,并且最新消息会被处理,因为调度能够在同一callback
内处理它。
如果这个推理是正确的,请告诉我,任何想法都赞赏。
谢谢!
答案 0 :(得分:0)
这是一个错误,因此伴随着混乱。 (错误的是调用io_service ::从两个不同的线程中运行而没有意识到。)现在意识到了,问题解决了。谢谢!