1. 说明
- 一个Poller类,使用了EventLoop,Channel
- 这时候才发现这是个虚基类…不过EventLoop中还有调用Poller::cancel(),虚基类中没这个函数…可以这样调用吗
2. 变量
-
类型定义
- ChannelList,Channel*列表
- ChannelMap,<int,Channel*>类型的map
-
ChannelMap channels_;
- 保护类型
-
EventLoop* ownerLoop_;
- EventLoop对象
3. 函数
-
构造
- 赋值ownerLoop_
-
析构
- 虚析构,默认析构,需要子类实现,
-
virtual Timestamp poll(int timeoutMs, ChannelList* activeChannels) = 0;
- 纯虚函数
-
virtual void updateChannel(Channel* channel) = 0;
-
virtual void removeChannel(Channel* channel) = 0;
- 两个纯虚函数,必须由子类实现
-
virtual bool hasChannel(Channel* channel) const;
- 看是否有参数中这个channel
-
static Poller* newDefaultPoller(EventLoop* loop);
- 在Poller/DefaultPoller.cc中实现了,决定使用PollPoller还是EPollPoller
-
void assertInLoopThread() const
- 调用ownerLoop_->assertInLoopThread();
本文详细解析了Poller类的设计与实现,包括其作为虚基类的角色,与EventLoop和Channel的关系,关键成员变量如ChannelList和ChannelMap的用途,以及核心函数如poll和updateChannel的抽象定义。同时探讨了如何通过静态函数newDefaultPoller选择合适的子类实现。
2307

被折叠的 条评论
为什么被折叠?



