我目前正在研究分层状态机(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 | +---------------------------------------------------------------+