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);
}