跳到主要内容

delay

简介

延迟执行计时器

一个批量超时定时器,可以触发一个未来时间点内一系列函数在既定相对时间执行

既可以直接使用pkg.delay静态对象,也可以通过new_object创建delay对象实例使用

delay里包含两个计时器:

基于时间轮盘的计时器,接口函数为init_delay/invoke_delay

基于最小堆的计时器,接口函数为init_delay2/invoke_delay2

组件接口

delay.gs

函数原型函数作用
void init_delay(float max_duration, float frame_duration, float warn_execute_seconds = 0)初始化延迟时间和延迟精度,根据延迟精度将延迟时间划分为若干轮询时间片,同一个轮询时间片内的事件执行的先后顺序跟注册顺序有关。
void set_delay_speed(int speed)设置延迟倍速,按speed设置的倍速推进延迟事件
void delay_invoke(float seconds, function func)设置在未来某个时间要触发的事件(函数)
void init_delay2(float warn_execute_seconds = 0)初始化基于最小堆的计时器
void delay_invoke2(float seconds, function func)定时在指定时长后执行函数(无时长限制,基于最小堆实现的计时器,和delay_invoke2配对)

TimeWheel

时间轮盘

成员变量

变量名类型初始值须初始化描述
namestringnil可选名称
max_durationint0可选所有帧时长总和(单位:毫秒)
frame_durationint0可选每帧时长(单位:毫秒)
slotsarraynil可选时间刻度数组
slot_sizeint0可选
time_funcfunctionnil可选获取当前时间的函数
cocoroutinenil可选调度协程
runningboolfalse可选
execute_warn_msint0可选执行耗时警告(update的执行间隔,单位:毫秒)
last_slot_indexint-1可选运行时
running_slot_indexint-1可选

成员方法

函数原型函数作用
string desc()获取描述文本
void schedule(float seconds, function func)添加到指定的时间刻度上
bool step_slot(int target_slot_index)步进执行下一刻度
void update()更新一次
void start()启动调度协程
void stop()停止调度协程

MinHeapTimer

基于最小堆实现的计时器

成员变量

变量名类型初始值须初始化描述
namestringnil可选名称
heaparraynil可选最小堆
time_funcfunctionnil可选时间函数
cocoroutinenil可选启动状态
runningboolfalse可选
execute_warn_msint0可选执行耗时警告(update的执行间隔,单位:毫秒)
semaphoresync_objectnil可选信号量

成员方法

函数原型函数作用
string desc()获取描述文本
void schedule(float seconds, function func)增加一个在指定时间执行的任务
array try_pop_from_heap()从最小堆中弹出已经到达执行时间的最小值
void start()启动
void stop()停止

样例

import pkg.delay;

// 使用时间轮盘计时器
delay=>init_delay(10f, 0.1f);

// 1秒后执行
delay=>delay_invoke(1f, () {
printf("dealy: 1 seconds\n");
});

// 使用最小堆计时器
delay=>init_delay2();

// 1秒后执行
delay=>delay_invoke2(1f, () {
printf("dealy2: 1 seconds\n");
});