关于有限状态机的一种程序实现结构

 关于状态机的定义已经比较模糊了
大致猜一下  有限状态机是指 起始结点到终点之间存在有限个数的状态。
通过这些状态之间的跳转可以简单的对付复杂的输入

在实际应用中,许多状态特性明显或者不明显的都能划分出状态机
特别是面向对象思想应用到编程中,状态的意义越来越明显

下面要谈到的程序实现来自一个简单的dhcp客户端的实现代码
由于dhcp有多个状态:
discovery   offer   decline  request 等等等等这些都是dhcp协议的状态
当然实际编码中,应该划分更接近实现的状态

划分完成后,每一种状态应该对应一个处理流程,处理流程不论是正常结束还是错误结束都应该跳转到其他状态上。

本例子中,程序员巧妙的运用函数指针来实现状态的跳转
1.每个状态对应处理流程函数都定义如下形式
void *process_1();
void *process_2();
.............

2.而状态机的启动和运行有赖于下面代码

void        *(*currState)()    =    &process_m;

    do{
        if ( (currState=(void *(*)())currState()) == NULL ) exit(1);
    }while ( currState != &process_k );
或者
    do{
        currState=(void *(*)())currState();
    } while ( currState );


3.在每个状态的处理流程中,要么返回一个状态,要么返回NULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值