1.狀態機的優點
相對於switch case能夠實現的乙個完整流程,使用狀態機的好處是架構更加清晰,在乙個呼叫週期內可以完成不同「case」的切換,同時可以通過狀態機函式中的形參傳遞期望的引數,避免了在switch case中標誌位,全域性變數滿天飛的現象。
2.函式實現
首先我們在狀態機系統中需要用到的引數包括:狀態機識別符、事件型別、定時器的識別符、狀態機形參資料型別以及定時器引數資料型別,下面給出需要用到的結構體定義
/*time machine event enum*/
/*time machine timer enum*/
/*time machine timer struct*/
其次,我們在狀態機系統中涉及到的操作包括狀態機初始化,定時器初始化,狀態機切換,訊息傳送函式,開啟定時器,關閉定時器,定時器管理函式,定時器超時函式,下面給出這些函式的定義:
default:
ret = false;
printf("etimer wrong = %d\n",etimer);
break;
}return ret;
}最後,構建三個簡單的狀態機來驗證我們的架構是否完整,基本邏輯為在init事件中開啟定時器,定時器超時後設定訊息傳送標誌位,主函式中輪詢該標誌位的狀態,傳送對應訊息給狀態機,接收到該訊息後切換到下乙個狀態機狀態,以此迴圈
default:
break;}}
default:
break;}}
至此,我們完成了乙個最小狀態機系統的構建。
tips:
1.狀態機函式中傳遞的形參的資料型別以及我們要傳送和接收的資料型別都可根據需求進行變更
狀態機 狀態機0
近半年都忙於做專案,沒有太多的時間去整理和總結在專案中用過的技術 個人還是覺得技術需要總結提煉和沉澱的,忙到沒時間去總結提公升其實不 是什麼好事,這次講下狀態機,在戰鬥型別的遊戲中角色有多種不同的狀態,而狀態的切換錯綜複雜,23種設計模式中有一種模式叫做狀態模式,不過 這種模式是把狀態切換條件放到各...
python 狀態機 Python 狀態機
class statemachine def init self self.handlers 狀態轉移函式字典 self.startstate none 初始狀態 self.endstate 最終狀態集合 引數name為狀態名,handler為狀態轉移函式,end state表明是否為最終狀態 de...
狀態機小記
工作上有個功能模組用到了類似狀態機的東東,於是上網科普了一番。狀態機是由一系列輸入驅動,然後系統由其中一種狀態轉換為另一種狀態並產生某種輸出,這樣子的乙個系統叫做狀態機。狀態機分為兩種,一種是輸出只和系統狀態有關,叫做摩爾狀態機,另一種是輸出和輸入以及系統狀態都相關,叫做公尺莉狀態機。有關輸入 狀態...