跳到主要内容

delay

简介

延迟执行计时器

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

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

组件接口

delay.gs

函数原型函数作用
void init_delay(float max_duration, float frame_update_interval, float warn_execute_seconds = 0)初始化延迟时间和延迟精度,根据延迟精度将延迟时间划分为若干轮询时间片,同一个轮询时间片内的事件执行的先后顺序跟注册顺序有关。
void set_delay_speed(int speed)设置延迟倍速,按speed设置的倍速推进延迟事件
void delay_invoke(float seconds, function func)设置在未来某个时间要触发的事件(函数)

样例

import pkg.delay;

parallel int _total := 0;
void func(int value, sync_object semaphore)
{
atomic.lock_fetch_add("_total", value);
semaphore.give();
}

void test()
{
// 重置总和
_total := 0;

// 创建延迟计时器
object d = new_object(delay, this_domain());
defer d.close();
d.init_delay(10f, 0.02);

sync_object semaphore = sync_object.create_semaphore();
defer semaphore.close();

int n = 100;
int total = 0;
for (int i = 1 upto n)
{
total += i;
d.delay_invoke(0.01 * i, (: func, i, semaphore :));
}

//等待n个延迟执行完成
for (int i = 1 upto n)
semaphore.take();

//等待延迟事件执行完成
gtest.test_equal(_total, total);
}