2

我有一个 GUI 连接并接收大量消息的应用程序,问题是它每隔一段时间就会收到一条乱序的消息。

该连接在单独的工作线程(单独的io_service)上运行,并将send函数(执行 a async__writeio_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。请让我知道这个推理是否正确,任何想法表示赞赏。谢谢!

4

1 回答 1

0

这是一个错误,因此随之而来的混乱。(错误地从 2 个单独的线程调用 io_service::run 却没有意识到。)现在实现了,问题解决了。谢谢!

于 2009-07-22T08:19:56.600 回答