目录
-
- 5.1 event_base_dispatch
- 5.2 event_base_loop
- 5.3 event_base_loopbreak
- 5.4 event_base_loopexit
- 5.5 event_base_get_running_event
- 5.6 event_base_dump_events
- 5.7 event_base_active_by_fd
- 5.8 event_base_active_by_signal
- 5.9 event_base_foreach_event
- 5.10 event_base_gettimeofday_cached
- 5.11 event_base_update_cache_time
- 5.12 event_base_get_num_events
- 5.13 event_base_get_max_events
5.1 event_base_dispatch
功能
执行事件分发循环。
备注
本函数是event_base_loop的一个简单封装。代码如下:
int
event_base_dispatch(struct event_base *event_base)
{
return (event_base_loop(event_base, 0));
}
本函数执行事件循环,直到没有更多的pending的或者active的事件,或者event_base_loopbreak和event_base_loopexit被调用了,才会退出循环。
原型
int event_base_dispatch(struct event_base *base);
5.2 event_base_loop
功能
执行事件分发循环。等待事件就绪,并且回调设置在事件上面的回调函数。
备注
事件分发循环默认将一直运行,直到没有更多的pending或者active的事件,或者event_base_loopbreak和event_base_loopexit被调用。
原型
int event_base_loop(struct event_base *eb, int flags);
参数说明:
flags:
-
EVLOOP_ONCE
事件循环将一直阻塞,直到我们有active事件,一旦所有的active事件已经回调完毕,事件循环将立即退出。 -
EVLOOP_NONBLOCK
不在事件循环中阻塞,查看是否有事件active,如果有,则回调优先级最高的事件,然后退出。 -
EVLOOP_NO_EXIT_ON_EMPTY
即使没有pending事件,事件循环也不退出,直到event_base_loopbreak和event_base_loopexit被调用。
5.3 event_base_loopbreak
功能
立即停止 event_base_loop事件循环
备注
如果event_base_loopbreak被调用,那么event_base_loop在完成当前event的回调后退出时间循环。通常event_base_loopbreak是在事件的回调函数中被调用的,这种行为好比是循环代码中的break指令。
后续再调用event_base_loop将正常进行,不受此影响。