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

Simulink中的狀態(tài)機(jī)建模方法 Simulink數(shù)據(jù)可視化與分析功能
深入理解C語(yǔ)言:循環(huán)語(yǔ)句的應(yīng)用與優(yōu)化技巧

MCU編程語(yǔ)言和開發(fā)環(huán)境介紹
高效率PA設(shè)計(jì)的雙重挑戰(zhàn)

如何高效率選出高能效的電感?

觸發(fā)器和狀態(tài)機(jī)的關(guān)系是什么
高效率二極管如何識(shí)別判斷

c類放大器最高效率是什么
如何在FPGA中實(shí)現(xiàn)狀態(tài)機(jī)
電源設(shè)計(jì):同步整流帶來(lái)的不僅僅是高效率
玩轉(zhuǎn)Spring狀態(tài)機(jī)

評(píng)論