int event_base_dispatch(struct event_base *); int event_base_loop(struct event_base *, int); 在event_base_dispatch函数中,实际上调用的是event_base_loop(event_base, 0);也就是如果使用event_base_dispatch函数执行事件主循环,那么会将event_base_loop的第二个参数设置为0去调用它,下面来看看event_ba...
int event_base_dispatch(struct event_base *base); 函数说明: 进入循环等待事件参数说明:由event_base_new函数返回的指向event_base结构的指针调用该函数, 相当于没有设置标志位的event_base_loop。程序将会一直运行, 直到没有需要检测的事件了, 或者被结束循环的API终止。 事件循环推出event_base_loopbreak和event...
event_base_dispatch()将一直运行,直到没有已经注册的事件了,或者调用了event_base_loopbreak()或者event_base_loopexit()为止。 这些函数定义在*<event2/event.h>中,从libevent 1.0*版就存在了。 03. event_base_loopexit函数 /** Exit the event loop after the specified time The next event_base_loop()...
event_warnx("%s: reentrant invocation. Only one event_base_loop""can run on each event_base at once.", __func__); EVBASE_RELEASE_LOCK(base, th_base_lock);return-1; }base->running_loop =1; clear_time_cache(base);if(base->sig.ev_signal_added &&base->sig.ev_n_signals_added) e...
事件处理主循环 Libevent 的事件主循环主要是通过 event_base_loop ()函数完成的,其主要操作如下面的流程 图所示,event_base_loop 所作的就是持续执行下面的循环。 清楚了 event_base_loop 所作的主要操作,就可以对比源代码看个究竟了,代码结构还是相当清晰的,具体的分析看代码注释即可。
event_base是libevent里另外一个核心的结构,它是存放各种事件集的容器,同时也是libevent事件循环(event loop)的主要结构。和event一样,它也是不透明结构。 每个libevent程序都必须创建至少一个event_base结构。如果需要多个线程监听I/O的话,需要为每个线程分配一个event_base(推荐的做法是one loop per thread)。
Libevent的事件主循环主要是通过event_base_loop ()函数完成的,其主要操作如下面的流程图所示,event_base_loop所作的就是持续执行下面的循环。 清楚了event_base_loop所作的主要操作,就可以对比源代码看个究竟了,代码结构还是相当清晰的。 int event_base_loop(struct event_base *base, int flags) { const str...
注意event_base_loopexit(base,NULL)和event_base_loopbreak(base)在事件循环没有运行时的行为不同:前者安排下一次事件循环在下一轮回调完成后立即停止(就好像带EVLOOP_ONCE标志调用一样);后者却仅仅停止当前正在运行的循环,如果事件循环没有运行,则没有任何效果。
event_base*base=(event_base*)arg; //执行完当前处理的事件函数就退出 //event_base_loopbreak(base); //运行完所有的活动事件再退出;事件循环没有运行时,也要等运行一次再退出; timevalt={3,0};//至少运行3秒后退出。 event_base_loopexit(base,&t); ...
Libevent是基于Reactor模式的网络库,在 Reactor 模式中,通常都有一个事件循环(Event Loop),在 Libevent 中,这个事件循环就是event_base结构体: structevent_base*event_base_new(void);// 创建事件循环voidevent_base_free(structevent_base*base);// 销毁事件循环intevent_base_dispatch(structevent_base*base)...