接前文,本文将在其基础上添加对定时器的支持。Github 地址:worker_thread。
Timer Structure
我们需要一个辅助结构来存储定时器的状态等信息:
1 | struct Timer : public std::enable_shared_from_this<Timer> { |
由于在 libev 不保证线程安全,因此ev_<handle>_start
和 ev_<handle>_stop
必须保证在事件循环所在的线程中调用,在上述结构中即是 Timer::Start
和 Timer::Stop
必须在事件循环中调用。
Modified Async Handler Callback
在 ev_async
的回调中添加处理定时器的代码:
1 | void WorkerThread::AsyncCb() { |
其中 pending_timers_
成员变量即保存了待处理的 Timer
变量,处理的动作由其 action
成员来指明。
Push Timers
这里即是准备等待添加到事件循环的定时器结构:
1 | template<class F, class... Args> |