【问题标题】:boost msm - boost msm multiple deferred eventsboost msm - 提升 msm 多个延迟事件
【发布时间】:2012-12-03 21:01:10
【问题描述】:

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

但是当我回到空闲状态时,有没有办法选择要处理的先前延迟的事件?或者有没有办法对它们进行优先排序,甚至忽略其中的一些?

谢谢,

【问题讨论】:

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


    【解决方案1】:

    我发现项目提供的文档中涵盖了延迟事件的基本功能,我发现这些文档总体上很有帮助。在标题为Orthogonal regions, terminate state, event deferring 的部分中查找文本“UML 将事件延迟定义为状态属性。为了适应这一点,MSM 允许您通过提供 deferred_events 类型在状态中指定它...”请注意,此处描述了两种不同的方法用于实现延迟事件。

    如果不测试示例,我不能说有关冲突转换和保护的参考材料是否允许您确定您在延迟事件上寻求的优先级。您可以发布您的问题或简化示例。

    【讨论】:

      【解决方案2】:

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

      如果您的情况确实是微不足道的(只有两种状态),那么没有什么能阻止您实现自己的延迟事件队列,在 Active 中将“延迟事件”传递给它。您可以使用将它们推送到自定义队列中的操作为每种事件类型实现内部转换。进入 Idle 后,您可以根据需要重新排序它们并将它们全部发布回 SM。不过,这个解决方案并不能很好地扩展,而且有点破解。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-22
        • 2013-08-21
        • 1970-01-01
        • 1970-01-01
        • 2013-05-22
        • 1970-01-01
        相关资源
        最近更新 更多