您的位置:首页 > 其它

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进行比较,确定事件是否超时
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐