boost msm - boost msm多个延迟事件

时间:2012-12-03 21:01:11

标签: c++ boost state-machine boost-msm

假设我有2个状态,一个活动状态和一个空闲状态。如果我收到一些处于活动状态的事件,我想推迟它们并在我回到空闲状态时执行它们。

但是当我回到空闲状态时,有没有办法选择哪个先前推迟的事件要处理?或者有没有办法确定它们的优先次序,甚至忽略其中的一部分?

谢谢,

2 个答案:

答案 0 :(得分:1)

我不知道提升MSM的原生解决方案。我听说过作者Christophe Henry对邮件列表上的这类问题非常敏感。

如果您的情况确实很简单(只有两个状态),那么没有什么能阻止您实现自己的延迟事件队列,在Active中将“defferred events”传递给它。您可以使用将其推入自定义队列的操作为每种事件类型实现内部转换。进入空闲状态后,您可以根据需要对它们进行重新排序,并将它们全部发送回SM。这个解决方案并不能很好地扩展,但它有点像黑客。

答案 1 :(得分:1)

我看到项目提供的文档中包含了延迟事件的基本功能,我发现这些功能很有帮助。在标题为Orthogonal regions, terminate state, event deferring的部分中查找文本“UML将事件延迟定义为状态属性。为了适应这种情况,MSM允许您通过提供deferred_events类型来指定状态...”请注意,有两种不同的方法在那里描述了实施延期事件。

如果没有测试一个例子,我不能说冲突过渡和守卫上的参考材料是否允许你建立你在延期事件上寻求的优先级。您可以发布您的问题或简化示例。