libevent简单使用小结
来源:互联网 发布:java无限循环停止代码 编辑:程序博客网 时间:2024/06/06 03:19
一、简单使用流程
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简单使用
- libevent(一):简单使用
- libevent服务端编程简单使用
- libevent中evbuffer简单使用
- libevent使用的简单案例
- (一)libevent安装及简单的使用
- 简单的html静态网页使用libevent
- JNI 简单使用小结
- wcf简单使用小结
- MySQL简单使用小结
- quartz简单使用小结
- log4net使用简单小结
- GCD使用简单小结
- Cmder简单使用小结
- libevent使用
- libevent使用
- 使用Libevent
- Adaboost 算法的原理与推导
- 而立之年,开发者在害怕什么?
- Linux有问必答:如何在Debian下安装闭源软件包
- 通过ui,自定义QMenu 控件
- wxWidgets程序总结
- libevent简单使用小结
- 杂烩:QWiget、QGraphics、QtQuick
- python jdango 数据库查询总结
- Code Review
- Your project contains error(s),please fix them.... 问题解决
- pre小技巧:强制换行与横向滚动条[转]
- VC6.0下设置Unicode编译环境
- android 项目出现 Theme.AppCompat.Light 的解决方法
- VirtualBox安装增强功能包