消息顺序不正确(使用io_service :: wrap)

时间:2009-07-20 14:28:33

标签: c++ boost-asio

我有一个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内处理它。 如果这个推理是正确的,请告诉我,任何想法都赞赏。 谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个错误,因此伴随着混乱。 (错误的是调用io_service ::从两个不同的线程中运行而没有意识到。)现在意识到了,问题解决了。谢谢!