簡(jiǎn)練狀態(tài)機(jī)的實(shí)現(xiàn)

#include<stdio.h>

typedef enum{

Start_state,

Doing_state,

End_state

}def_state;

typedef enum{

Start_event,

Doing_event,

End_event

}def_event;

typedef void (*func)(char* pData);

typedef struct{

def_state current_state;

def_event current_event;

def_state next_state;

func callback;

}def_Machine_state;

void start_task(char *pData)

{

? ? printf("start task!\n");

}

void doing_task(char *pData)

{

? ? printf("doing task!\n");

}

void end_task(char *pData)

{

? ? printf("end task!\n");

}

def_Machine_state Machine_run[]={

Start_state, Start_event, Doing_state, start_task,

Doing_state, Doing_event, End_event,? doing_task,

End_event, End_event, End_event,? ? end_task,

};

void loop_machine(def_event trigger_eve,char *pData)

{

? ? int size;

? ? size = sizeof(Machine_run)/sizeof(def_Machine_state);

? ? for(int i=0; i<size;i++)

? ? {

? ? ? ? if(trigger_eve == Machine_run[i].current_event)

? ? ? ? {

? ? ? ? Machine_run[i].callback(pData) ;

? ? ? ? }

? ? }

}

main()

{

char *debug;

while(1){

loop_machine(Start_event,debug);

loop_machine(Doing_event,debug);

loop_machine(End_event,debug);

}

}

該簡(jiǎn)單狀態(tài)機(jī)設(shè)置了三個(gè)狀態(tài),三個(gè)事件觸發(fā)。


運(yùn)行結(jié)果
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容