1.event 状态 event:主要分为三种状态及转换:initialized、pending、active 关联base=>initialized状态 event_add=>pending状态 触发事件,调用回调=>active状态 event_del=>非pendding状态(可以理解为初始化状态) active状态(persistent属性)=>pending状态 active状态(不含persistent属性)=>非pendding状态(可以理解为初始化...
每次当有事件 event 转变为就绪状态时,libevent 就会把它移入到 active event list[priority] 中,其中 priority 是 event 的优先级; 接着 libevent 会根据自己的调度策略选择就绪事件,调用其 cb_callback()函数执行事件处理;并根据就绪的句柄和事件类型填充 cb_callback 函数的参数。
event_process_active 主要是处理激活队列中的数据 static void event_process_active(struct event_base *base) { struct event *ev; struct event_list *activeq = NULL; int i; short ncalls; 获得就绪链表中有就绪事件并且高优先级的表头 for (i = 0; i < base->nactivequeues; ++i) { if (TAILQ...
此时可以将事件添加到event_base中,这使之进入“未决(pending)”状态。在未决状态下,如果触发事件的条件发生(比如说,文件描述符的状态改变,或者超时时间到达),则事件进入“激活(active)”状态,(用户提供的)事件回调函数将被执行。如果配置为“持久的(persistent)”,事件将保持为未决状态。否则,执行完回调后,事件不再...
voidevent_active(structevent*ev,intwhat,shortncalls); /** 参数ev为要激活的事件 * what可以为EV_READ, EV_WRITE, and EV_TIMEOUT * ncalls为激活次数*/ 其他函数 #defineevtimer_new(base, callback, arg) \event_new((base), -1,0, (callback), (arg))#defineevtimer_add(ev, tv) \event_...
active event (usually via event_io_active or such). It should return 0 on success and -1 on error. */ int (*dispatch)(struct event_base *, struct timeval *); /** Function to clean up and free our data from the event_base. */ ...
//Libevent中的事件处理器是event结构类型吧。、//event结构体封装了句柄、事件类型、回调函数//以及其他必要的标志和数据struct event_callback{TAILQ_ENTRY(event_callback)evcb_active_next;/** * TAILQ_ENTRY的定义 * #define TAILQ_ENTRY(TYPE)
(base);// 这个下次讲res=evsel->dispatch(base,tv_p);// 重点timeout_process(base);// 下次说,这个不用管if(N_ACTIVE_CALLBACKS(base)){intn=event_process_active(base);// 重点if((flags&EVLOOP_ONCE)&&N_ACTIVE_CALLBACKS(base)==0&&n!=0)done=1;}elseif(flags&EVLOOP_NONBLOCK)done=1;}....
struct event_base { const struct eventop *evsel; 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 */ /* active event management */ struct event_list **activ...