WPS 2019如何清理云空间?WPS 2019如何将PDF转换为WORD?
WPS 2019如何清理云空间?进入金山文档网页端,点击我的文档勾
2023/04/10
(相关资料图)
事件驱动框架允许程序处理外部事件,如网络连接、文件I/O、超时和信号。事件驱动框架可以让程序通过回调函数处理不同的事件,回调函数可以在事件触发时立即被调用。
要实现一个简单事件驱动框架,首先需要创建一个事件处理函数,它是根据发生的不同事件调用不同的回调函数。然后,我们需要编写代码来注册事件的回调函数,即当某个事件发生时就要调用该回调函数。
直接开干:
#include#include #include #include #include //定义事件类型typedefenumEventType_t{EVENT_TEST_A=0,EVENT_TEST_B,EVENT_TEST_C,EVENT_ALL_NUM}EventType_t;//定义事件处理函数类型typedefvoid(*EventHandler_t)(EventType_ttype,void*pArg);//定义事件对象typedefstructEvent_t{EventType_ttype;EventHandler_thandler;void*pArg;}Event_t;//事件列表Event_tEventList[EVENT_ALL_NUM]={0};//注册事件并将事件以及事件处理函数等添加到事件列表中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;}//根据具体的某个事件调用对应的事件触发函数voidTriggerEvent(EventType_ttype){if(type>=EVENT_ALL_NUM){printf("Invalideventtype!");return;}if(EventList[type].handler!=NULL){EventList[type].handler(type,EventList[type].pArg);}}//对应事件A的处理函数voidHandlerEventTestA(EventType_ttype,void*pArg){printf("HandlerEventTestAiscalled!");}//对应事件B的处理函数voidHandlerEventTestB(EventType_ttype,void*pArg){printf("HandlerEventTestBiscalled!");}void*ThreadHandler(void*Arg){ while(1) { //触发事件A TriggerEvent(EVENT_TEST_A); usleep(1000*1000); //触发事件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
运行结果:
审核编辑:汤梓红
标签: