您的位置:首页 > 其它

libevent简单使用小结

2014-12-30 16:58 120 查看
一、简单使用流程

1、首先需要有一个总控结构,即为一个事件集——函数原型:event_int()

struct event_base* main_base;

main_base = event_init();或者 main_base = event_base_new();

2、事件

事件就是我们关心的、需要我们写函数进行处理的主体

struct event ev;

给事件添加处理回调函数——函数原型:

event_assign( struct event* ev,struct event_base* base,int fd, short event,\

(void*)(*fn)(int ,short,void*), (void*)arg )

int fd 指定要监视的文件描述符(如果仅为设置一个定时器,可不设置fd,直接给-1)

short event 可以是EV_READ,EV_WRITE或EV_READ|EV_WRITE表示该文件可以无阻塞地进行读写.

fn函数将会被调用,并传递给三个变量:

int fd:触发事件的文件描述符.

short event:触发事件的类型EV_TIMEOUT,EV_SIGNAL, EV_READ,
or EV_WRITE.

void* :由arg参数指定的变量.

另外重复注册的事件将会产生重复的事件通知.EV_PERSIST可以让注册的事件在执行完后不被删除,直到调用event_del()删除.

event_assign(&ev,main_base,s,EV_XXX|EV_PESIST,callback_handle,arg)有两个作用

(1)将事件ev和总控集main_base关联,等到main_base循环时,可以监控ev的状态

(2)把观察对象s加入到事件ev中,当EV_XXX事件发生时,调用callback_handle函数,arg为回调的参数,

EV_PESIST表示当进入回调后,ev事件继续保存在event queue(即仍在main_base观察的事件中)

3、超时时间

使用结构struct timeval tv;

EV_TIMEOUT标志表示某超时时间流逝后事件成为激活的;构造事件的时候,EV_TIMEOUT标志是被忽略的:可以在添加事件的时候设置超时,也可以不设置。

(即使此处不设置超时时间,在下一步中event_set一个超时时间,就相当于此处set了超时事件)

4、事件加入事件队列,被总控时间集调度
event_add(&ev,&tv);

把ev注册到main_base中去,tv为超时时间;



5、循环事件队列,处理事件

event_base_dispatch(main_base);

如果main_base中的事件是EV_PERSIST的,则该函数会阻塞,一直循环dispatch
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: