程序架构之事件机制 event

 

事件处理机制在操作系统上是随处可见,比如电脑键盘按下一个按钮,其实是硬件驱动层抛出的一个事件。就看上层应用谁有这个权限去捕捉这个消息。权限这个在我的小架构里还展示不考虑。

实现原理

我的事件处理机制大致如下,一个事件可以有多个发布者,可以有多个订阅者,可以多个同时订阅一个事件消息。

发布者其实就是逐一执行订阅者存放在队列里的回调函数。没有优先级要求。

 

结构类型

//事件控制句柄
typedef void * event_handle_t;
//事件回调函数类型
typedef void(*event_callback_t)(void *);

 1、获取事件句柄

可以通过eventName 在不同文件或者不同线程中去获取事件的句柄,eventName就是我们交互的桥梁

/*获取事件句柄
	获取已存在的事件句柄或者分配新的句柄指针
	event_handle_t 可用于发布和订阅  NULL表示分配失败
*/
event_handle_t event_register(char *eventName);

 2、事件发布

/*事件发布
在事件的触发位置调用 
该函数会调用所有订阅的函数,逐一执行一遍
*/
int event_publish(event_handle_t handle, void *eventArgs);

3 、注册事件

/*注册事件
将事件的处理函数写入事件队列中,当事件执行event_publish时,会主动调用该注册的回调函数
*/
void event_subscribe(int handle, event_callback_t callback);

参考应用

1、事件驱动层

    event_handle_t key = event_register("key");

    printf("开始发布消息1\r\n");

    event_publish(key, NULL);

2、应用执行层

void event_key_callback(void *args)
{
	printf("触发事件  event_key_callback\r\n");
}

void event_key2_callback(void *args)
{
	printf("触发事件  event_key2_callback\r\n");
}
    

event_handle_t key = event_register("key");
printf("开始订阅事件\r\n");
event_subscribe(key, event_key_callback);
event_subscribe(key, event_key2_callback);


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值