ngl_server 1.0
基于 Actor 模型的 C++ 服务器框架
ngl::tools::time_wheel Class Reference

时间轮定时器管理器 More...

#include <tools_time_wheel.h>

Classes

struct  impl_time_wheel
 time_wheel内部实现结构体 More...

Public Member Functions

 time_wheel (const time_wheel_config &aconfig=time_wheel_config(), bool aisthreadcallback=true)
 构造函数
 ~time_wheel ()
 析构函数
int count ()
 获取当前定时器数量
bool empty ()
 检查时间轮是否为空
int64_t server_start_ms ()
 获取服务器启动时间(毫秒)
int64_t server_current_ms ()
 获取服务器当前时间(毫秒)
int64_t addtimer (const wheel_parm &apram)
 添加定时器
void removetimer (int64_t atimerid)
 移除定时器
std::shared_ptr< wheel_nodepop_node ()
 弹出到期的定时器节点

Static Public Member Functions

static int64_t getms ()
 获取当前时间戳(毫秒)

Friends

class wheel

Detailed Description

时间轮定时器管理器

实现分层时间轮算法,用于高效管理大量定时器。 支持单次触发、重复触发和自定义间隔的定时器。 采用惰性移除机制,避免扫描整个时间轮。

Note
使用 Pimpl 惯用法隐藏实现细节。
// 创建时间轮并添加定时器示例
// 添加一个100ms后触发的定时器
parm.m_ms = 100;
parm.m_fun = [](const ngl::tools::wheel_node* node) {
// 定时器回调
};
int64_t timer_id = wheel.addtimer(parm);
// 添加一个每500ms重复触发的定时器
repeat_parm.m_ms = 500;
repeat_parm.m_count = 0; // 0表示永远重复
repeat_parm.m_intervalms = [](int64_t) { return 500; };
repeat_parm.m_fun = [](const ngl::tools::wheel_node* node) {
// 重复定时器回调
};
wheel.addtimer(repeat_parm);

Constructor & Destructor Documentation

◆ time_wheel()

ngl::tools::time_wheel::time_wheel ( const time_wheel_config & aconfig = time_wheel_config(),
bool aisthreadcallback = true )

构造函数

time_wheel构造函数

Parameters
aconfig时间轮配置
aisthreadcallback是否使用专用回调线程
aconfig时间轮配置
aisthreadcallback是否使用独立回调线程

◆ ~time_wheel()

ngl::tools::time_wheel::~time_wheel ( )
default

析构函数

time_wheel析构函数

Member Function Documentation

◆ addtimer()

int64_t ngl::tools::time_wheel::addtimer ( const wheel_parm & apram)

添加定时器

Parameters
apram定时器参数
Returns
定时器ID,用于后续移除操作

返回一个稳定的定时器ID。m_count <= 0 表示"永远重复"。

Parameters
apram定时器参数
Returns
定时器ID,失败返回-1

◆ count()

int ngl::tools::time_wheel::count ( )

获取当前定时器数量

获取当前活跃定时器数量

Returns
定时器数量

◆ empty()

bool ngl::tools::time_wheel::empty ( )

检查时间轮是否为空

Returns
为空返回true
Return values
true无活跃定时器
false有活跃定时器

◆ getms()

int64_t ngl::tools::time_wheel::getms ( )
static

获取当前时间戳(毫秒)

获取系统时钟毫秒时间戳

Returns
当前时间戳

使用system_clock,返回Unix纪元以来的毫秒数

Returns
当前系统时间的毫秒数

◆ pop_node()

std::shared_ptr< wheel_node > ngl::tools::time_wheel::pop_node ( )

弹出到期的定时器节点

从回调队列中弹出一个到期定时器节点

Returns
到期节点的共享指针,无到期节点返回nullptr

当回调被手动消费而非从专用回调线程消费时使用。

Returns
定时器节点的共享指针,队列为空时返回nullptr

◆ removetimer()

void ngl::tools::time_wheel::removetimer ( int64_t atimerid)

移除定时器

Parameters
atimerid定时器ID

移除是惰性的,标记共享取消标志而非扫描每个时间轮槽位。

Parameters
atimerid定时器ID
Note
设置取消标志,定时器将在下次触发时被跳过

◆ server_current_ms()

int64_t ngl::tools::time_wheel::server_current_ms ( )

获取服务器当前时间(毫秒)

获取服务器当前逻辑时间戳(毫秒)

Returns
服务器当前时间戳
当前逻辑时间的毫秒数

◆ server_start_ms()

int64_t ngl::tools::time_wheel::server_start_ms ( )

获取服务器启动时间(毫秒)

获取服务器启动时间戳(毫秒)

Returns
服务器启动时间戳
服务器启动时的系统时间毫秒数

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