在event_base_dispatch函数中,实际上调用的是event_base_loop(event_base, 0);也就是如果使用event_base_dispatch函数执行事件主循环,那么会将event_base_loop的第二个参数设置为0去调用它,下面来看看event_base_loop函数的定义: 执行事件主循环 int event_base_loop(struct event_base *base, int flags) { /...
Libevent的事件主循环主要通过event_base_loop函数完成。 intevent_base_loop(structevent_base*base,intflags){// Libevent选择的IO多路复用机制conststructeventop* evsel =base->evsel;// io多路复用模型上下文void* evbase =base->evbase;structtimeval tv;structtimeval* tv_p;intres, done;/* clear time ...
事件循环可以通过多种方式退出,例如用户调用event_base_loopbreak或event_base_loopexit,或者在某些错误情况下自动退出。 这个dispatch有多重实现,针对select、epoll等 B-1:epoll_dispatch epoll.c # epoll_dispatch(struct event_base *base, struct timeval *tv) epoll_dispatch函数是基于epoll的事件循环的一部分,用...
int event_base_dispatch(struct event_base *base); 等价于没有设置标志的 event_base_loop函数 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. event_base_dispatch()将一直运行,直到没有已经注册的事件了,或者调用了event_base_loopbreak()或者event_base_loopexit()为止。 这些函数...
BaseEventLoop.getnameinfo(sockaddr,flags=0) This method is acoroutine, similar tosocket.getnameinfo()function but non-blocking. 这个方法是一个coroutine,类似于socket.getnameinfo()函数,但是不是非阻塞的。 18.5.1.10. Connect pipes 连接管道 BaseEventLoop.connect_read_pipe(protocol_factory,pipe) ...
它的BaseEventLoop._run_once方法在循环的每个tick上调用,因此包含一次迭代所需的所有操作。这将调用所有当前准备好的回调,I/O轮询,调度生成的回调,然后调度call_later回调,如果您计划自己实现事件循环,则需要提供与其类似的方法,函数的名称和主体只是实现细节。
int event_base_loop(struct event_base *, int); 等待事件被触发,然后调用它们的回调函数。这是 event_base_dispatch的更灵活版本。默认情况下,这个循环会一直运行,直到没有添加的事件,或者直到调用了event_base_loopbreak()或者evenet_base_loopexit().你可以通过flags参数修改这个行为。
本节课主要讲了循环运行的接口和原理,包括运行循环和循环退出的函数。涉及到循环的函数主要有两类:运行循环和循环退出。学习这些内容可以帮助我们更好地解决问题,特别是在多线程环境下可能遇到的问题。
event_loop 一旦我们有一些事件注册在一个event_base上后,我们自然想让libevent提醒我们。 //接口#defineEVLOOP_ONCE 0x01#defineEVLOOP_NONBLOCK 0x02#defineEVLOOP_NO_EXIT_ON_EMPTY 0x04intevent_base_loop(structevent_base*base,intflags); 默认情况下,这个event_base_loop函数会返回一个event_base,直到没...
EV_READ => EVLIST_INSERTED => eventqueue EV_WRITE => EVLIST_INSERTED => eventqueue EV_TIMEOUT => EVLIST_TIMEOUT => timetree EV_SIGNAL => EVLIST_SIGNAL => signalqueue 1.4 event_base_loop() 事件处理主循环 这里是事件的主循环,只要flags不是设置为EVLOOP_NONBLOCK, 该函数就会一直循环监听事件...