FIX 4.0 Demo 1.0
Loading...
Searching...
No Matches
fix40::TimingWheel Class Reference

支持周期性任务的时间轮定时器 More...

#include <timing_wheel.hpp>

Collaboration diagram for fix40::TimingWheel:
Collaboration graph

Public Member Functions

 TimingWheel (int wheel_size, int tick_interval_ms)
 
TimerTaskId add_task (int delay_ms, TimerTask task)
 添加一次性任务
 
TimerTaskId add_periodic_task (int interval_ms, TimerTask task)
 添加周期性任务
 
void cancel_task (TimerTaskId id)
 取消任务
 
void tick ()
 时间轮前进一格,执行到期任务
 

Detailed Description

支持周期性任务的时间轮定时器

时间轮是一种高效的定时器实现,将时间划分为固定数量的槽位, 每个槽位存储在该时刻到期的任务列表。

特性
  • O(1) 时间复杂度添加任务
  • 支持一次性任务和周期性任务
  • 支持取消任务
  • 线程安全
工作原理
  1. 时间轮由 N 个槽位组成,每个槽位代表一个时间间隔
  2. 指针每次 tick() 前进一格,执行当前槽位的到期任务
  3. 对于延迟超过一圈的任务,使用 remaining_laps 记录剩余圈数
使用示例
TimingWheel wheel(60, 1000); // 60 个槽,每槽 1 秒
// 添加一次性任务,5 秒后执行
auto id = wheel.add_task(5000, []() { std::cout << "Timeout!" << std::endl; });
// 添加周期性任务,每 30 秒执行一次
wheel.add_periodic_task(30000, []() { send_heartbeat(); });
// 取消任务
wheel.cancel_task(id);
// 在定时器回调中驱动时间轮
reactor.add_timer(1000, [&wheel](int) { wheel.tick(); });
支持周期性任务的时间轮定时器
Definition timing_wheel.hpp:67

Constructor & Destructor Documentation

◆ TimingWheel()

fix40::TimingWheel::TimingWheel ( int  wheel_size,
int  tick_interval_ms 
)
inline

Member Function Documentation

◆ add_periodic_task()

TimerTaskId fix40::TimingWheel::add_periodic_task ( int  interval_ms,
TimerTask  task 
)
inline

添加周期性任务

Parameters
interval_ms执行间隔(毫秒),必须大于 0 且不超过 MAX_SAFE_DELAY_MS
task任务回调函数
Returns
TimerTaskId 任务 ID,可用于取消任务;失败返回 INVALID_TIMER_ID
Note
任务将每隔 interval_ms 毫秒执行一次,直到被取消
Here is the caller graph for this function:

◆ add_task()

TimerTaskId fix40::TimingWheel::add_task ( int  delay_ms,
TimerTask  task 
)
inline

添加一次性任务

Parameters
delay_ms延迟时间(毫秒),必须大于 0 且不超过 MAX_SAFE_DELAY_MS
task任务回调函数
Returns
TimerTaskId 任务 ID,可用于取消任务;失败返回 INVALID_TIMER_ID
Note
任务将在约 delay_ms 毫秒后执行一次,然后自动移除

◆ cancel_task()

void fix40::TimingWheel::cancel_task ( TimerTaskId  id)
inline

取消任务

Parameters
id要取消的任务 ID

标记任务为已取消状态,任务将在下次 tick() 时被清理。 如果 id 为 INVALID_TIMER_ID 或任务不存在,则无操作。

Here is the caller graph for this function:

◆ tick()

void fix40::TimingWheel::tick ( )
inline

时间轮前进一格,执行到期任务

该方法应由外部定时器周期性调用,调用间隔应等于 tick_interval_ms。

执行流程
  1. 指针前进一格
  2. 遍历当前槽位的任务列表
  3. 跳过已取消的任务
  4. 对于 remaining_laps > 0 的任务,减少圈数
  5. 执行到期任务
  6. 周期性任务重新调度到下一周期
Note
任务回调在锁外执行,避免死锁

The documentation for this class was generated from the following file: