世界热议:实现一个简单的事件驱动处理框架

2023-06-09 10:24:19 来源:嵌入式应用研究院


(相关资料图)

事件驱动框架允许程序处理外部事件,如网络连接、文件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

运行结果:

审核编辑:汤梓红

标签:

上一篇:电源设计中电容的工作原理 各类电源中电容器的正确选用
下一篇:最后一页