高级I/O框架库libevent

来源:互联网 发布:淘宝聚划算怎么报名 编辑:程序博客网 时间:2024/06/08 12:24
libevent是基于reactor模式建立的,reactor由四部分构成:

句柄(文件描述符),时间多路分发器(I/O复用函数),

事件处理器(回调函数),reactor

libevent有如下特点:跨平台支持,同一事件源,线程安全;

所以第一步定义libevent实例:

struct event base *base = event_init();

接下来:因为libevent可以监听三种事件:I/O事件,信号事件,定时事件

所以定义事件可以用统一的event_new();

也可以用evsignal_new()/evtimer_new();

如果定义信号事件:

struct event *sig_ev = evsignal_new(base,SIGINT,sig_fun,NULL);

或者 struct event *sig_ev = event_new(base,SIGINT,EV_SIGNAL,sig_fun,NULL);

这里sig_fun是事件处理函数,如果要求不断地响应事件,可以将其设置为永久事件

即就是:EV_SIGNAL|EV_PERSIST;

下来就是注册事件,将事件添加至反应堆里,event_add(sig_ev,NULL);

第四步,事件循环,调用event_base_dispath(base);

之后当事件处理完将事件移除反应堆:event_free(sig_ev);

event_base_free(base);

差不多就是libevent处理事件的全过程。

 

原创粉丝点击