目录开启事件主循环执行事件主循环校对时间 阻塞/非阻塞处理激活队列中的event事件主循环的退出event_base_loopexitevent_base_loopbreak开启事件主循环 在libevent中,事件主循环的作用就是执行一个循环,在循环中监听事件以及超时的事件并且将这些激活的事件进行
两个函数的区别是如果正在执行激活事件的回调函数, 那么event_base_loopexit将在事件回调执行结束后终止循环(如果tv时间非NULL, 那么将等待tv设置的时间后立即结束循环), 而event_base_loopbreak会立即终止循环。 event_process_active 主要是处理激活队列中的数据 static void event_process_active(struct event_base ...
int event_base_loopexit(struct event_base *base, const struct timeval *tv); 功能: 让event_base在给定时间之后停止循环。 参数: base event_base_new的返回值 tv 表示延时的时间,如果为NULL 立即停止循环,没有延时 返回值: 成功: 0成功 失败: -1 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 1...
event_base_loopexit(base, &ten_sec); event_base_dispatch(base); } }// 执行完当前正在处理的事件后立即追出,如无操作则立即退出intevent_base_loopbreak(structevent_base *base);voidcb(intsock,shortwhat,void*arg){structevent_base *base= arg; event_base_loopbreak(base); }voidmain_loop(struct...
int (*del)(struct event_base *, evutil_socket_t fd, short old, short events, void *fdinfo); /** Function to implement the core of an event loop. It must see which added events are ready, and cause event_active to be called for each ...
注意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); ...
event_base_free() 释放资源,这不能销毁绑定事件 event_base_loop() 处理事件,根据指定的base来处理事件循环 event_base_loopbreak() 立即取消事件循环,行为各break语句相同 event_base_loopexit() 在指定的时间后退出循环 event_base_new() 创建并且初始事件 ...
1. event_base_loopexit(base, NULL) 如果当前正在为多个活跃事件调用回调函数,那么不会立即退出,而是等到所有的活跃事件的回调函数都执行完成后才退出事件循环 2. event_base_loopbreak(base) 如果当前正在为多个活跃事件调用回调函数,那么当前正在调用的回调函数会被执行,然后马上退出事件循环,而并不处理其他的活跃事...
libevent源码分析event_base_dispatch,event_base_lo。。。接⼝:event_base_dispatch /** Event dispatching loop 事件分配循环 This loop will run the event base until either there are no more pending or active, or until something calls event_base_loopbreak() or event_base_loopexit().这个循环...