假设我有 2 个状态,一个 Active 状态和一个 Idle 状态。如果我收到一些处于活动状态的事件,我想推迟它们并在我回到空闲状态时执行它们。
但是当我回到空闲状态时,有没有办法选择要处理的先前延迟的事件?或者有没有办法优先考虑它们,甚至忽略其中的一些?
谢谢,
假设我有 2 个状态,一个 Active 状态和一个 Idle 状态。如果我收到一些处于活动状态的事件,我想推迟它们并在我回到空闲状态时执行它们。
但是当我回到空闲状态时,有没有办法选择要处理的先前延迟的事件?或者有没有办法优先考虑它们,甚至忽略其中的一些?
谢谢,
我不知道提升 MSM 的原生解决方案。我听说作者 Christophe Henry 对邮件列表中的此类问题非常敏感。
如果您的情况确实是微不足道的(只有两种状态),那么没有什么能阻止您实现自己的延迟事件队列,在 Active 中将“延迟事件”传递给它。您可以使用将它们推入自定义队列的操作为每种事件类型实现内部转换。进入 Idle 后,您可以根据需要重新排序它们并将它们全部发布回 SM。不过,这个解决方案并不能很好地扩展,而且有点破解。
我看到项目提供的文档中涵盖了延迟事件的基本功能,我发现这些文档总体上很有帮助。在标题为正交区域、终止状态、事件延迟的部分中,查找文本“UML 将事件延迟定义为状态属性。为了适应这一点,MSM 允许您通过提供 deferred_events 类型在状态中指定它......”注意有那里描述了两种不同的方法来实现延迟事件。
如果不测试示例,我不能说有关冲突转换和守卫的参考材料是否允许您确定您在延迟事件上寻求的优先级。您可以发布您的问题或简化示例。