newbi问题请与我一起裸露,因为我正在努力与此。提升男男性接触者 - 更清晰
我想使用boost msm状态机,但我很难想象它是如何工作的。假设我们只有2个状态(s1,s2),并且从s1到s2,则需要触发事件e1,并返回您需要的另一个e2。 e1和e2只能分别在s1和s2内被触发。我开始启动statemachine(start())然后生病有一个while循环,每1分钟将返回到状态机,但必须从它的左边拿起。
main()
{
MSM.start(); //start state machine
while (a_condition)
{
ProcessInputsfromIO();
Go_backtoStatemachine(); //how can i do this?
delay(1min)
}
MSM.stop();
}
所以基本上时的状态完成执行后,的statemachine将退出,然后生病了1分钟的延迟,那么while循环将要带我回到我之前,我退出的状态,还是我认为这就是我们应该如何实现一个状态机。
我在寻求什么与众不同的东西?如果是,那么人们如何实现一个非阻塞状态机器?如果不是,那我怎么能实现Go_backtoStatemachine()?
那么我没有办法让我退出一个状态,然后在不经过初始状态的情况下重新进入状态? – Kam 2012-03-05 02:07:13
@ user1248779:您可以在任何状态和回退之间移动,也可以让事件使状态机保持相同的状态。你只需要有正确的转换表。仔细研究一下这个例子。例如。请注意,当您在停止状态中停止事件时,您仍处于停止状态。当你不断收到open_close事件时,你将在空和打开状态之间转换 - 不断。 – 2012-03-05 02:41:12
家伙,谢谢你的帮助,你不知道我有多赞赏这个。但也许我没有正确解释自己。如果我从不退出状态机,在状态之间移动并保持相同的状态是没有问题的。但假设我处于状态S1,并且我从S1退出并基本从状态机退出(但我不停止它),唯一可以重新进入状态机的方式是通过触发一个事件。所以如果我正确设计状态表,也许我会添加一个事件给每个状态,让你回到相同的状态,并在我的while循环结束时生病只是调用该事件? – Kam 2012-03-05 03:11:14