Повышение МСМ - яснее - PullRequest
       22

Повышение МСМ - яснее

2 голосов
/ 05 марта 2012

Новый вопрос, пожалуйста, открой мне, как я борюсь с этим.

Я хочу использовать конечный автомат boost msm, но мне трудно представить, как он работает. Допустим, у нас есть только 2 состояния (s1, s2), и чтобы перейти от s1 к s2, вам нужно запустить событие e1, а для возврата вам нужно еще одно e2. e1 и e2 могут быть запущены только из s1 и s2 соответственно.

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

main()
{
 MSM.start(); //start state machine

 while (a_condition)
 {
 ProcessInputsfromIO();
 Go_backtoStatemachine(); //how can i do this?
 delay(1min)
 }
 MSM.stop();
}

Таким образом, в основном, когда состояние завершает выполнение, машина состояний выйдет, затем у меня будет задержка в 1 минуту, затем цикл while должен вернуть меня в состояние, в котором я находился до выхода, или я думаю, что именно так мы должен реализовать конечный автомат.

Является ли то, что я прошу, необычным? Если да, то как люди реализуют неблокирующий конечный автомат? если нет, то как я могу реализовать Go_backtoStatemachine ()?

1 Ответ

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

Здесь есть довольно простой пример:

MSM Simple Tutorial

A конечный автомат - абстрактное понятие. У него есть состояния, события и т. Д. В действительности у него нет концепции блокирования, неблокирования и т. Д. В рамках Boost MSM вы можете вызвать start() для входа в начальное состояние, process_event() для ввода событий и stop() до остановки. Конечный автомат просто фиксирует состояние системы и может вызывать некоторые функции при изменении состояния системы. Как бы вы его использовали, зависит от приложения.

...