所以我看到很多关于在C中实现状态机的建议涉及状态结构等,但我想知道为什么我们不能只使用while(1)来处理非常简单的状态机。例如,
int currentstate = state1;
void state1function(){
dosomething();
if(user chooses to go to state 2){
currentstate = state2;
}
}
int main{
while(1){
if(currentstate == state1){
state1function();
}
else if (currenstate == state2){
state2function();
}
基本上跟踪全局变量中的状态,并在while循环中根据状态调用函数。这对我来说似乎很简单,我不明白为什么它不会起作用。
任何人都可以告诉我为什么这样的东西不起作用/不会被推荐?
由于
答案 0 :(得分:3)
迟早,使用这种方法,你会发现拥有:
会很方便OnEntry(), OnExit(), Do(), OnEvent()
为每个州提供服务。在这个复杂阶梯的某个地方,你很可能放弃蛮力风格,你开始时,这可能看起来像你在问题中给出的代码。
while(1)
构造与状态机完全无关。只要单个执行线程(main()或OS线程)长时间运行,就会使用它,因为它们通常位于嵌入式系统或服务器应用程序上。如果申请是以状态机的形式或其他形式编写的,那么这并不重要。
答案 1 :(得分:2)
根据您尝试解决的问题,全局或静态是一种简单的解决方案。当您需要一次管理多个状态机时,和/或当您需要从多个线程或进程更改状态时,使用结构派上用场。
答案 2 :(得分:1)
没有等待的while循环将占用大量CPU。我认为使用互斥锁或seamphores的事件机制将非常有用。
答案 3 :(得分:0)
C不是异步的(默认情况下)。无限循环只会导致程序“冻结”,直到结果完成。