EventLoop是一个事件循环,功能是进行事件监控和事件处理。我们添加需要监听的事务到这个事件循环内,每次有事件发生就会通知,然后根据不同的描述符、事件类型进行处理。
有了EventLoop模块,服务器的所有事件都由EventLoop模块来完成。每当有一个连接,都会绑定一个EventLoop模块和线程。
EventLoop类的定义如下:
class EventLoop {
private:
Epoll *ep;
bool quit;
public:
EventLoop();
~EventLoop();
void loop();
void updateChannel(Channel*);
};
通过EventLoop中的loop()函数可以开始事件驱动:
void EventLoop::loop(){
while(!quit){
std::vector<Channel*> chs;
chs = ep->poll();
for(auto it = chs.begin(); it != chs.end(); ++it){
(*it)->handleEvent();
}
}
}