1.event 状态 event:主要分为三种状态及转换:initialized、pending、active 关联base=>initialized状态 event_add=>pending状态 触发事件,调用回调=>active状态 event_del=>非pendding状态(可以理解为初始化状态) active状态(persistent属性)=>pending状态 active状态(不含persistent属性)=>非pendding状态(可以理解为初始化...
此时可以将事件添加到event_base 中,这使之进入“未决(pending)”状态。在未决状态下,如果触发事件的条件发生(比如说,文件描述 符的状态改变,或者超时时间到达 ),则事件进入“激活(active)”状态,(用户提供的)事件回调函数将被执行。如果配置为“持久的(persistent)”,事件将保持为未决状态。否则, 执行完回调后,事...
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 转变为就绪状态时,libevent 就会把它移入到 active event list[priority] 中,其中 priority 是 event 的优先级; 接着 libevent 会根据自己的调度策略选择就绪事件,调用其 cb_callback()函数执行事件处理;并根据就绪的句柄和事件类型填充 cb_callback 函数的参数。
queues. Active events with a lower priority are always processed before events with a higher priority. The number of different priorities can be set initially with the event_base_priority_init() function. This function should be called before the first call to event_base_dispatch(). The ...
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_...
event_process_active 主要是处理激活队列中的数据 static voidevent_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_FIRST(base->...
2,当一个事件通过event_add被注册到event_base上的时候,这个事件处于pending(等待状态),当只有有事件进来的时候,event才会被激活active状态,相关的回调函数就会被调用。 3,persistent 如果event_new中的what参数选择了EV_PERSIST,则是持久的类型。持久的类型调用完回调函数后,会继续转为pending状态,就会继续等待事件进来...
Libevent的最基本操作单元就是event,每个event表示一系列状况: 一个文件描述符准备好读写 一个文件描述符正准备好读写 一个到时提醒 一个信号发生 一个用户触发...