關於有限狀態機的一種程序實現結構

 關於狀態機的定義已經比較模糊了
大致猜一下  有限狀態機是指 起始結點到終點之間存在有限個數的狀態。
通過這些狀態之間的跳轉可以簡單的對付複雜的輸入

在實際應用中,許多狀態特性明顯或者不明顯的都能劃分出狀態機
特別是面向對象思想應用到編程中,狀態的意義越來越明顯

下面要談到的程序實現來自一個簡單的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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章