event的回调函数定义及event结构和event_base结构中各个成员的描述
2009-02-06 11:30
369 查看
libevent实现了网络IO,timer,signal的事件触发机制. 可以很方便的应用于event-driven服务器中,作为其底层事件处理模块. 比较成功的案
例有 memcache(分布式缓存), PLB(负载均衡器)等.
1. 回调函数定义
void (*ev_callback)(int, short, void *arg);
这个回调函数的参数的意思为:
参数1: 表示触发事件的文件句柄,比如一个socket对象.
参数2: 表示事件发生的结果,可能是超时、可读、可写.
参数3: 表示传递给事件的参数.
2. event的结构描述
struct event {
TAILQ_ENTRY (event) ev_next; /*增加下一个事件*/
TAILQ_ENTRY (event) ev_active_next; /*增加下一个活动事件*/
TAILQ_ENTRY (event) ev_signal_next; /*增加下一个信号*/
unsigned int min_heap_idx; /* for managing timeouts 表示该event保存在min_heap数组中的索引*/
struct event_base *ev_base; /* 一个全局变量,管理着事件,如事件总数,事件列表*/
int ev_fd; /*文件描述符,比如一个socket*/
short ev_events; /*该事件的触发信号,如EV_READ|EV_WRITE
short ev_ncalls; /*触发该事件后的调用次数*/
short *ev_pncalls; /* Allows deletes in callback */
struct timeval ev_timeout; //用来保存事件的超时时间
int ev_pri; /* smaller numbers are higher priority */
void (*ev_callback)(int, short, void *arg); /*事件的回调函数*/
void *ev_arg; /*回调函数的参数*/
int ev_res; /* result passed to event callback */
/*事件的使用过程定义,
1. 初始化(EVLIST_INIT,在event_set中设置)
2. 加入到事件列表(EVLIST_INSERTED,在event_add中设置,
如果使用event_add时指定超时事件,则同时使用EVLIST_TIMEOUT标志把该事件加入到超时事件列表)
3. 事件活动(EVLIST_ACTIVE,在event_active中设置)
*/
int ev_flags;
};
3. event_base 的结构描述
event_base 定义在event-internal.h文件中
struct event_base {
const struct eventop *evsel; //表示选择的事件引擎,可能为:epoll, poll, select
void *evbase; //全局对象
int event_count; /* counts number of total events */
int event_count_active; /* counts number of active events */
int event_gotterm; /* Set to terminate loop */
int event_break; /* Set to terminate loop immediately */
/* active event management */
struct event_list **activequeues;
int nactivequeues;
/* signal handling info */
struct evsignal_info sig;
struct event_list eventqueue;
struct timeval event_tv; //系统的当前时间
struct min_heap timeheap; //用来检测事件是否超时的堆栈
struct timeval tv_cache; //与event::ev_timeout进行比较,确定事件是否超时
};
例有 memcache(分布式缓存), PLB(负载均衡器)等.
1. 回调函数定义
void (*ev_callback)(int, short, void *arg);
这个回调函数的参数的意思为:
参数1: 表示触发事件的文件句柄,比如一个socket对象.
参数2: 表示事件发生的结果,可能是超时、可读、可写.
参数3: 表示传递给事件的参数.
2. event的结构描述
struct event {
TAILQ_ENTRY (event) ev_next; /*增加下一个事件*/
TAILQ_ENTRY (event) ev_active_next; /*增加下一个活动事件*/
TAILQ_ENTRY (event) ev_signal_next; /*增加下一个信号*/
unsigned int min_heap_idx; /* for managing timeouts 表示该event保存在min_heap数组中的索引*/
struct event_base *ev_base; /* 一个全局变量,管理着事件,如事件总数,事件列表*/
int ev_fd; /*文件描述符,比如一个socket*/
short ev_events; /*该事件的触发信号,如EV_READ|EV_WRITE
short ev_ncalls; /*触发该事件后的调用次数*/
short *ev_pncalls; /* Allows deletes in callback */
struct timeval ev_timeout; //用来保存事件的超时时间
int ev_pri; /* smaller numbers are higher priority */
void (*ev_callback)(int, short, void *arg); /*事件的回调函数*/
void *ev_arg; /*回调函数的参数*/
int ev_res; /* result passed to event callback */
/*事件的使用过程定义,
1. 初始化(EVLIST_INIT,在event_set中设置)
2. 加入到事件列表(EVLIST_INSERTED,在event_add中设置,
如果使用event_add时指定超时事件,则同时使用EVLIST_TIMEOUT标志把该事件加入到超时事件列表)
3. 事件活动(EVLIST_ACTIVE,在event_active中设置)
*/
int ev_flags;
};
3. event_base 的结构描述
event_base 定义在event-internal.h文件中
struct event_base {
const struct eventop *evsel; //表示选择的事件引擎,可能为:epoll, poll, select
void *evbase; //全局对象
int event_count; /* counts number of total events */
int event_count_active; /* counts number of active events */
int event_gotterm; /* Set to terminate loop */
int event_break; /* Set to terminate loop immediately */
/* active event management */
struct event_list **activequeues;
int nactivequeues;
/* signal handling info */
struct evsignal_info sig;
struct event_list eventqueue;
struct timeval event_tv; //系统的当前时间
struct min_heap timeheap; //用来检测事件是否超时的堆栈
struct timeval tv_cache; //与event::ev_timeout进行比较,确定事件是否超时
};
相关文章推荐
- 数据结构:(更新中)成员变量、成员函数和实例一般命名和定义方法
- 【6.13】 定义基类Base,其数据成员为高h,定义成员函数disp为虚函数。然后再由High派生出长方体类Cuboid与圆柱体类Cylinder。并在两派生类中定义成员函数disp为虚函数。在主函
- c++ 在类体外定义的成员函数,函数体的左括号提示:error 应输入声明
- 《第七周任务三》设计Complex,要求类成员函数在类外定义,实现减法,乘法,除法
- !!!!!!!!!!!!!!!!C++:派生类中重定义基类的成员函数与虚函数区别在哪里?
- 定义和实现一个类的成员函数为回调函数
- C++实例 静态成员的引入——静态数据成员的定义、调用,静态成员函数的实现、调用。
- 第五周项目一—三角形类定义成员函数
- 如何定义和实现一个类的成员函数为回调函数
- Javascript 中定义函数回调
- C++中类的声明与其成员函数的定义分离--以提高类的复用性
- c++11 条款22:当使用Pimpl(指向实现的指针)时,在实现文件里定义特定的成员函数
- Time类的定义(成员函数)
- bs_t结构及其相关函数的定义
- 理解数组,结构 ,函数指针,指针函数,数组指针,指针数组,结构指针的定义和实现
- 成员函数在类外定义的时候,函数名为啥不能加static
- 用类的成员函数定义复数类重载运算符
- 4,在本章第2.6.2(题目错误)节中给出了包含类定义的头文件student.h,包含成员函数定义的源文件student.cpp以及包含主函数的源文件main.cpp。请完善该程序,在类中增加一个对数
- 如何定义和实现一个类的成员函数为回调函数?
- 利用一组宏定义实现类成员函数的回调