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
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
相关文章推荐
- 使用libevent写的一个简单服务器的代码
- 使用libevent实现最简单的android http-server
- libevent的使用方法--回显服务器的简单实例
- FIELD-SYMBOLS的一些简单使用小结
- libevent简单介绍以及使用(带有服务器和客户端)
- 有关C++输入,类,文件重定向的使用和成员函数的简单小结
- JNI 简单使用小结
- (转发)scikit-learn使用笔记与sign prediction简单小结
- scikit-learn使用笔记与sign prediction简单小结
- python中机器学习包scikit-learn使用笔记与sign prediction简单小结
- libevent使用简单示例
- 问题小结(4)-在res里定义数组的简单使用
- Matcom的使用简单小结
- 20131203实验室工作小结——matcom的安装与简单使用
- window下ping简单使用小结
- wcf简单使用小结
- 使用libevent和boost编写一个简单的tcp服务器
- MySQL简单使用小结
- libevent简单使用
- 使用libevent和boost编写一个简单的tcp服务器