赞
踩
目录
- //头文件
- #include <event2/event.h>
- //创建一个事件处理框架
- struct event_base * event_base_new(void)
- //释放一个事件处理框架
- //参数: event_base_free(struct event_base *base)
- void event_base_free(struct event_base *base);
- //查看底层支持的IO转换模型
- const char** event_get_supported_methods(void)
- //查看当前实际处理框架使用的IO转接模型
- const char *event_base_get_method(const struct event_base *base);
- //头文件
- #include <event2/event.h>
- //启动事件处理框架中的事件循环
- //参数: event_base_new() 的返回值
- /*
- 事件检测过程中的特点
- 举例: 检测读事件
- -如果对方没有发送数据过来,会一直持续检测,等待事件被触发
- -检测到有读事件,默认情况下只会被处理一次,事件循环就停止了,只能接受一次数据
- -如果要持续的接收数据,需要额外设置
- */
- //这个函数被调用,内部会进行事件检测,代码阻塞在这一行
- int event_base_dispatch(struct event_base *base);
-
- //头文件
- #include <event2/event.h>
-
- //表示一个时间段,tv_sec+tv_usec
- struct timeval{
- long tv_sec;
- long tv_usec; //微秒
- };
-
- //假设事件循环正在继续,并且在处理一个实际纪有效的事件,代用这个函数终止事件循环
- //事件循环不会马上终止,在tv指定的时长之后,事件就被终止了
- int event_base_loopexit(struct event_base *base,const struct timeval *tv);
-
- 参数:
- -base:事件处理框架
- -tv: 在指定的时间段之后,退出事件循环
- //马上终止事件循环
- int event_base_loopbreak(struct event_base *base);
- //头文件
- #include <event2/event.h>
- #define EV_TIMEOUT 0x01 //定时器超时
- #define EV_READ 0x02 //读,检测读缓冲区是否有数据
- #define EV_WRITE 0x04 //写,检测写缓冲区是否可写
- #define EV_SIGNAL 0x08 //信号
- #define EV_PERSIST 0x10 //设置事件被重复检测
- #define EV_ET 0x20 //边沿模式
-
- typedef void (*event_callback_fn)(evutil_socket_t fd, short what,void *arg);
- 参数:
- -fd: 文件描述符,是event_new()第二个参数
- -what: 记录了实际文件描述符触发的事件
- -arg: event_new()的最后一个参数
-
- //创建一个需要检测的事件,struct event 就是创建出的事件
- //evutil_socket_t == int
- //event_new()函数的本质就是对一个文件描述符进行封装
- struct event* event_new(struct evnet_base *base, evutil_socket_t fd,
- short what, event_callback_fn cb, void *arg);
- 参数:
- -base:事件处理框架
- -fd: 一个文件描述符,比如管道的文件描述符,套接字通信的文件描述符
- -what:要检测的事件,检测第二个参数fd的事件
- -EV_READ: 读事件
- -EV_WRITE:写事件
- -EV_SIGNAL:信号事件(linux)
- -EV_ET: 设置边沿模式
- -cb:函数指针对应一个回调函数,当检测的事件被触发,这个函数就被调用
- -arg: 作为实参传递给回调函数cb
-
- void event_free(struct event *event);
- struct timeval{
- long tv_sec; //秒
- long tv_usec; //微秒
- };
- //事件被创建之后,不能被事件处理框架直接检测,需要做添加处理
- int event_add(struct event *ev, const struct timeval *tv)
- 参数:
- -ev: 通过 event_new() 创建得到的事件
- -tv: 超时时长,如果不用指定为NULL
- -检测了一个事件,并且在tv指定的时间段中没有被触发,这个事件对应的回调函数会被强制调用
- -如果指定为NULL,事件不触发,对应的回调函数就不被调用
- //被检测的事件从事件处理框架上删除
- int event_del(struct event *ev);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。