吐槽部分
你以为你以为的就是你以为的么…
今天重新看了一下 muduo 的定时器实现的源码部分, 才发之前的理解是错, 之前只是停留在 muduo 的定时器是 timerfd 是实现的, 没有再去往下看, 今天重新捡起来看了一下源码, 才发现以前的理解错了
muduo 定时器
muduo 定时器封装了 Timer.h
里面保存的是超时时间和回调函数, TimerQueue.h
使用set
容器保存多个定时器, 然后在TimerQueue
中使用timerfd_create
创建一个timerfd
句柄, 插入定时器A
后先比较A
的触发时间和TimerQueue
的触发时间, 如果A
的触发时间比其小就使用timerfd_settime
重置TimerQueue
的timerfd
的触发时间, TimerQueue
中的timerfd
的触发时间永远与保存的定时器中触发时间最小的那个相同, 然后timerfd
触发可读后, 遍历保存的多个定时器, 看看有没有同时到期的, 有执行回调函数