状态机的实现无非就是 3 个要素:状态、事件、响应。转换成具体的行为就 3 句话。
-
发生了什么事?
-
现在系统处在什么状态?
-
在这样的状态下发生了这样的事,系统要干什么?
用 C 语言实现状态机主要有 3 种方法:switch—case 法、表格驱动法、函数指针法。
switch—case 法
状态用 switch—case 组织起来, 将事件也用switch—case 组织起来, 然后让其中一个 switch—case 整体插入到另一个 switch—case 的每一个 case 项中 。
switch(StateVal)
{
case S0:
switch(EvntID)
{
case E1:
action_S0_E1(); /*S0 状态下 E1 事件的响应*/
StateVal = new state value;/*状态迁移,不迁移则没有