новыйbi вопрос пожалуйста, голый со мной как Im борющийся с этим.Boost MSM - очиститель
Я хочу использовать форматированный автомат msm, но мне трудно представить, как это работает. Скажем, у нас есть только 2 состояния (s1, s2) и перейти от s1 в s2, вам нужно запустить событие e1, и вам нужно еще один e2. e1 и e2 могут быть запущены только из s1 и s2 соответственно.
Теперь в основном() Я начинаю с запуска statemachine (start()), тогда у больного есть цикл while, который каждые 1 мин возвращается на конечный автомат, но должен забирать с того места, где он остался.i.e.
main()
{
MSM.start(); //start state machine
while (a_condition)
{
ProcessInputsfromIO();
Go_backtoStatemachine(); //how can i do this?
delay(1min)
}
MSM.stop();
}
Так в основном, когда государство завершает выполнение, то StateMachine выйдет, то больной имеет задержку в 1 мин, после чего цикл в то время как нужно будет принять меня обратно в состояние я был до I съезда, или я подумайте, что мы должны реализовать государственную машину.
Является ли то, что я прошу, необычно? Если да, то как люди реализуют неблокирующий конечный автомат? если нет, то как я могу реализовать Go_backtoStatemachine()?
Итак, у меня нет способа выйти из состояния, а затем повторно войти в него, не пройдя через состояние init? – Kam
@ user1248779: Вы можете перемещаться между любым состоянием и обратно, а также иметь событие, чтобы конечный автомат оставался в одном состоянии. Вам просто нужно иметь правую таблицу перехода. Изучите пример немного более тщательно. Например. когда вы получаете событие остановки в остановленном состоянии, вы остаетесь в состоянии остановки. Когда вы продолжаете получать событие open_close, вы будете переключаться между состояниями Empty и Open - непрерывно. –
Парень, благодарю вас за помощь, вы не представляете, насколько я ценю это. Но, может быть, я не объяснил себя должным образом. Перемещение между состояниями и даже пребывание в одном и том же состоянии не проблема, если я никогда не выхожу из конечного автомата. Но допустим, что я состою в состоянии S1, и я выхожу из S1 и в основном выхожу из конечного автомата (но я не останавливаю его), единственный способ, которым я могу вернуться на конечный автомат, - это запустить событие. Итак, если я правильно оформляю таблицу состояний, возможно, я добавлю событие в каждое состояние, которое вернет вас в одно и то же состояние, а в конце моего цикла while просто вызовет это событие? – Kam