WPS?2019如何清理云空間?WPS 2019如何將PDF轉(zhuǎn)換為WORD?
WPS 2019如何清理云空間?進入金山文檔網(wǎng)頁端,點擊我的文檔勾
2023/04/10
(相關(guān)資料圖)
事件驅(qū)動框架允許程序處理外部事件,如網(wǎng)絡(luò)連接、文件I/O、超時和信號。事件驅(qū)動框架可以讓程序通過回調(diào)函數(shù)處理不同的事件,回調(diào)函數(shù)可以在事件觸發(fā)時立即被調(diào)用。
要實現(xiàn)一個簡單事件驅(qū)動框架,首先需要創(chuàng)建一個事件處理函數(shù),它是根據(jù)發(fā)生的不同事件調(diào)用不同的回調(diào)函數(shù)。然后,我們需要編寫代碼來注冊事件的回調(diào)函數(shù),即當某個事件發(fā)生時就要調(diào)用該回調(diào)函數(shù)。
直接開干:
#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);//定義事件對象typedefstructEvent_t{EventType_ttype;EventHandler_thandler;void*pArg;}Event_t;//事件列表Event_tEventList[EVENT_ALL_NUM]={0};//注冊事件并將事件以及事件處理函數(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ù)具體的某個事件調(diào)用對應(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);}}//對應(yīng)事件A的處理函數(shù)voidHandlerEventTestA(EventType_ttype,void*pArg){printf("HandlerEventTestAiscalled!");}//對應(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; //注冊事件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
運行結(jié)果:
審核編輯:湯梓紅
標簽: