1. 说明
- 一个PollPoller类,在muduo中主要用于调试,在DefaultPoller.cc指定是使用PollPoller还是EPollPoller
2. 变量
-
类型定义
- PollFdList,pollfd结构的列表
-
pollfds_
- PollFdList类型,如果不懂这个的话要先学一下poll
-
channels_
- 继承过来的,map<int,Channel*>类型
3. 函数
1. 私有
- void fillActiveChannels(int numEvents,
ChannelList* activeChannels) const;- 遍历pollfds_列表,如果有响应事件,设置这个Channel的revents_并加入到参数中的activeChannels列表中
2. 公有(除了构造都是重载)
-
构造
- 赋值EventLoop对象loop_
-
析构
- 默认析构
-
Timestamp poll(int timeoutMs, ChannelList* activeChannels)
- 通过poll()调用,调用私有函数fillActiveChannels()把活跃的通道加入到参数activeChannels中
-
void updateChannel(Channel* channel) override;
- 如果这个channel不在poll队列中就加入,并把下标设置一下.在的话就更新一下
-
void removeChannel(Channel* channel) override;
- 总之就是通过一系列操作把这个channel删除了,从关注的channel中删除,从poll中删除这个关注事件
- 这里要注意从poll中删除,不能简单的pollfds_.erase(),因为每个都有对应的下标,erase的话就都变了,要把它移动到队尾,然后pop_back(),具体看代码