/***高效率狀態機***/
狀態機對于有一定編程經驗的程序員一定會用到,因為對于我們的各種各樣的模塊他們都會有各種狀態,其他模塊都會根據這些狀態和數據進行處理;同時在網絡編程方面也會根據網絡狀態和消息類型進行相應處理等等方面狀態機的使用是非常廣泛的,我們通常稱這種狀態機為有限狀態機—FSM。
在進行有限狀態機編寫之前,我們需要進行狀態的梳理,最好是能畫UML圖或者是簡單的畫一些狀態圖,那么我們平時都是如何實現這個狀態機框架的呢?
1)用判斷語句進行狀態機的分支
if(statue == STATUE_1)sStatue1Process();
else if(statue == STATUE_2)sStatue2Process();
else if(statue == STATUE_3)sStatue3Process();
elsesStatue4Process();
上面通過if/else分支了4種狀態,分別每種狀態有各自的處理辦法process函數,那么狀態之間如何轉換呢?在我們的狀態處理函數里面,會通過處理當前狀態的相關事務,然后通過相關條件改變statue,如statue=STATUE_2,從而下一次進入對應的狀態中!
那么上面我們是通過分支來進行處理,同樣我們也可以使用switch來進行處理!至于選擇if/else還是switch,我們之前有個文章進行分析,大家可以前往閱讀,這兩種分支語句對于不太多的狀態仍然是首選的,而對于我們的狀態較多,那么可能通過判斷會浪費一些時間,為了提高效率,我們提出了第二種方法。
2)用函數指針高效提高狀態機效率
參考代碼如下:
按照預期輸出了最終的結果,該辦法類似于用空間換了時間,把狀態和處理進行了直接綁定,這樣會使用掉一些內存,不過對于整個軟件代碼而言是不值一提的!
優化:我們可能對于狀態處理還需要傳入一些數據,我們可以優化函數指針讓其變成含參數的形式!等等優化版本大同小異!(哈哈,上面的代碼手機打得,風格寫得不好大家請見諒)
審核編輯:劉清
-
C語言
+關注
關注
180文章
7614瀏覽量
137378 -
狀態機
+關注
關注
2文章
492瀏覽量
27613 -
fsm
+關注
關注
0文章
35瀏覽量
12835
發布評論請先 登錄
相關推薦
評論