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
时间轮盘
成员变量
| 变量名 | 类型 | 初始值 | 须初始化 | 描述 |
|---|---|---|---|---|
| name | string | nil | 可选 | 名称 |
| max_duration | int | 0 | 可选 | 所有帧时长总和(单位:毫秒) |
| frame_duration | int | 0 | 可选 | 每帧时长(单位:毫秒) |
| slots | array | nil | 可选 | 时间刻度数组 |
| slot_size | int | 0 | 可选 | |
| time_func | function | nil | 可选 | 获取当前时间的函数 |
| co | coroutine | nil | 可选 | 调度协程 |
| running | bool | false | 可选 | |
| execute_warn_ms | int | 0 | 可选 | 执行耗时警告(update的执行间隔,单位:毫秒) |
| last_slot_index | int | -1 | 可选 | 运行时 |
| running_slot_index | int | -1 | 可选 |
成员方法
| 函数原型 | 函数作用 |
|---|---|
| string desc() | 获取描述文本 |
| void schedule(float seconds, function func) | 添加到指定的时间刻度上 |
| bool step_slot(int target_slot_index) | 步进执行下一刻度 |
| void update() | 更新一次 |
| void start() | 启动调度协程 |
| void stop() | 停止调度协程 |
MinHeapTimer
基于最小堆实现的计时器