【发布时间】:2013-06-22 17:05:12
【问题描述】:
我目前正在研究分层状态机(UML 状态机、状态图等),以下我不清楚:
在转换期间和从状态将事件推送到机器自己的事件队列是否有效,如果是,它在实践中是否安全使用,还是应该避免?这样做是否有某些影响(至少是实现的怪癖,正交区域发挥作用时的问题,或类似的问题)?
我将用两个虚拟机器来说明这个问题:
-
以下机器将处于状态
A等待事件A_to_B,之后它会通过将事件作为转换动作分派而进入无限循环:+-----+ +-----+ +-----+ | A | A_to_B / | B | B_to_C / | C | |-----| dispatch B_to_C |-----| dispatch C_to_A |-----| O---->| +------------------->| +------------------->| | | | | | | | +-----+ +-----+ +-----+ ^ C_to_A / | | dispatch A_to_B | +-----------------------------------------------------+ -
通过将事件作为入口操作分派,以下机器将立即进入无限循环:
+-------------------+ +-------------------+ +-----+ | A | | B | | C | |-------------------| A_to_B |-------------------| B_to_C |-----| O---->| on entry: +---------->| on entry: +---------->| | | dispatch A_to_B | | dispatch B_to_C | | | | | | dispatch C_to_A | | | +-------------------+ +-------------------+ +-----+ ^ | | C_to_A | +---------------------------------------------------------------+
【问题讨论】:
-
我不知道发生了什么。但是,如果您要对事件进行排队,那么最好将进程分离到单独的处理器/内核。然后,您可以控制每个的优先级。共享内存也很有用。
-
+ 用于 ASCII 绘图来解释问题,你是如何绘图的?
-
我用asciiflow.com画了这些
标签: events transitions fsm state-machine