В настоящее время я изучаю иерархические машины состояний (машины состояний 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 | +---------------------------------------------------------------+