WPS?2019如何清理云空間?WPS 2019如何將PDF轉(zhuǎn)換為WORD?
WPS 2019如何清理云空間?進(jìn)入金山文檔網(wǎng)頁(yè)端,點(diǎn)擊我的文檔勾
2023/04/10
(相關(guān)資料圖)
事件驅(qū)動(dòng)框架允許程序處理外部事件,如網(wǎng)絡(luò)連接、文件I/O、超時(shí)和信號(hào)。事件驅(qū)動(dòng)框架可以讓程序通過(guò)回調(diào)函數(shù)處理不同的事件,回調(diào)函數(shù)可以在事件觸發(fā)時(shí)立即被調(diào)用。
要實(shí)現(xiàn)一個(gè)簡(jiǎn)單事件驅(qū)動(dòng)框架,首先需要?jiǎng)?chuàng)建一個(gè)事件處理函數(shù),它是根據(jù)發(fā)生的不同事件調(diào)用不同的回調(diào)函數(shù)。然后,我們需要編寫(xiě)代碼來(lái)注冊(cè)事件的回調(diào)函數(shù),即當(dāng)某個(gè)事件發(fā)生時(shí)就要調(diào)用該回調(diào)函數(shù)。
直接開(kāi)干:
#include#include #include #include #include //定義事件類型typedefenumEventType_t{EVENT_TEST_A=0,EVENT_TEST_B,EVENT_TEST_C,EVENT_ALL_NUM}EventType_t;//定義事件處理函數(shù)類型typedefvoid(*EventHandler_t)(EventType_ttype,void*pArg);//定義事件對(duì)象typedefstructEvent_t{EventType_ttype;EventHandler_thandler;void*pArg;}Event_t;//事件列表Event_tEventList[EVENT_ALL_NUM]={0};//注冊(cè)事件并將事件以及事件處理函數(shù)等添加到事件列表中voidRegisterEvent(EventType_ttype,EventHandler_thandler,void*pArg){if(type>=EVENT_ALL_NUM){printf("Invalideventtype!");return;}EventList[type].type=type;EventList[type].handler=handler;EventList[type].pArg=pArg;}//根據(jù)具體的某個(gè)事件調(diào)用對(duì)應(yīng)的事件觸發(fā)函數(shù)voidTriggerEvent(EventType_ttype){if(type>=EVENT_ALL_NUM){printf("Invalideventtype!");return;}if(EventList[type].handler!=NULL){EventList[type].handler(type,EventList[type].pArg);}}//對(duì)應(yīng)事件A的處理函數(shù)voidHandlerEventTestA(EventType_ttype,void*pArg){printf("HandlerEventTestAiscalled!");}//對(duì)應(yīng)事件B的處理函數(shù)voidHandlerEventTestB(EventType_ttype,void*pArg){printf("HandlerEventTestBiscalled!");}void*ThreadHandler(void*Arg){ while(1) { //觸發(fā)事件A TriggerEvent(EVENT_TEST_A); usleep(1000*1000); //觸發(fā)事件B TriggerEvent(EVENT_TEST_B); usleep(1000*1000); }}intmain(void){ pthread_tThread; //注冊(cè)事件A&BRegisterEvent(EVENT_TEST_A,HandlerEventTestA,NULL);RegisterEvent(EVENT_TEST_B,HandlerEventTestB,NULL); pthread_create(&Thread,NULL,ThreadHandler,NULL); pthread_detach(Thread);while(1) { usleep(2000*10); }return0;}
編譯程序:gcc test.c -o test -lpthread
運(yùn)行結(jié)果:
審核編輯:湯梓紅
標(biāo)簽: