Допустим, у меня есть 2 состояния, активное состояние и состояние ожидания. Если я получаю некоторые события в активном состоянии, я хотел бы отложить их и выполнить, когда я вернусь в состояние ожидания.
Но когда я возвращаюсь в состояние ожидания, есть ли способ выбрать, какое ранее отложенное событие обрабатывать? или есть способ расставить приоритеты или даже игнорировать их?
Спасибо,
Я вижу, что основные возможности отложенных событий описаны в документации по проекту, которая мне показалась полезной в целом. В разделе под названием Ортогональные области, состояние завершения, отсрочка события поищите текст: «UML определяет отсрочку события как свойство состояния. Чтобы приспособиться к этому, MSM позволяет указать это в состояниях, предоставив тип deferred_events …». Обратите внимание, что для реализации отложенных событий описаны два различных метода.
Не тестируя пример, я не могу сказать, позволят ли вам ссылочные материалы по конфликтным переходам и защитникам установить приоритет, который вы ищете для отложенных событий. Вы можете опубликовать свою проблему или упрощенный пример.
Я не знаю о собственном решении для повышения МСМ. Я слышал, что автор Кристоф Генри довольно отзывчив на этот вопрос в списке рассылки.
Если ваша ситуация действительно так тривиальна (только два состояния), ничто не мешает вам реализовать свою собственную отложенную очередь событий, передавая ей «отложенные события» в Active. Вы можете реализовать внутренний переход для каждого типа события с помощью действия, которое помещает их в вашу пользовательскую очередь. При входе в режим ожидания вы можете изменить их порядок и отправить их обратно на SM. Это решение не очень хорошо масштабируется, и это немного хакерство.