Повышение МСМ - Ньюби - PullRequest
       3

Повышение МСМ - Ньюби

1 голос
/ 05 марта 2012

Хорошо, скажем, у меня есть 2 состояния (s1 и s2). s1 может перейти к s2 с событием e1 и s2 может перейти к s1 с событием e2.

Теперь давайте также предположим, что e1 и e2 запускаются только из s1 и s2 соответственно, если применяются определенные условия.

поэтому в main () я сначала начну с запуска конечного автомата с помощью start (), а затем у меня будет бесконечный цикл. В этом цикле я должен быть в состоянии продолжать работать в конечном автомате в том же состоянии, в котором я его оставил. Как я могу это сделать?

т.е. Допустим, я был в s2, и я выполнил весь код в s2, и я не запустил e2, затем я вышел из состояния и достиг конца цикла while, теперь я хочу вернуться к s2, чтобы продолжить с этого момента и посмотреть, время e2 сработает.

1 Ответ

0 голосов
/ 23 октября 2012

Краткий ответ: создайте событие третьего типа, которое вызывает внутренний переход в обоих состояниях, и опубликуйте его в своем бесконечном цикле в main.

Длинный ответ начинается с вопроса, почему кто-то захочетсделай это?По крайней мере, по моему опыту, конечные автоматы должны быть скорее концепцией, управляемой событиями, которая реагирует на внешние события.Использование опроса (который выглядит как то, что вам нужно) внутри конечного автомата не совсем то, для чего нужны конечные автоматы.Я бы проводил опрос за пределами конечного автомата (в основном в вашем случае), и когда я получал событие, то отправлял его на конечный автомат.

Для состояния также характерно устанавливать таймер (снова внеконечный автомат), чтобы опубликовать «событие тайм-аута» (или любое другое событие в этом отношении) через определенный промежуток времени.На мой взгляд, это хорошая практика - отменить этот запрос при выходе из государства, которое его запросило.Даже если в некоторых случаях это кажется бесполезным, потому что нет никакой причины покидать состояние, оно, несомненно, помогает плохому программисту по обслуживанию, который реализует новое событие, выходящему из состояния, а затем вырывает голову, задаваясь вопросом, почему он получил состояние «событие тайм-аута» трипереходы позже.

Если вы новичок в конечных автоматах, я настоятельно рекомендую книгу Миро Самека: http://www.amazon.com/exec/obidos/ASIN/0750687061/quantumleap06-20

...