在 QWorker 中,我们一般使用 Delay 来实现定间隔延迟作业执行。如果要重复执行,可以简单的设置设置 ARepeat 参数即可按照 ADelay 指定的指定定时执行。但在某些场景下,我们要求作来立即执行一次后,后续再按照指定的间隔执行,直接使用 Delay 显然无法达到目的。
下面我们给出一个例子,使用 Delay 来实现这一需求。
第一步:我们使用 Post 来提交一个立即执行的作业
Workers.Post(DoJob,nil);
第二步:我们在 DoJob 函数执行完成时,调用 Delay 来延迟15秒执行下一次操作。
procedure DoJob(AJob:PQJob);
begin
...
Workers.Delay(DoJob,15*Q1Second,nil);
end;
在上面的例子里,我们完成可以在第二步中,修改代码,根据当前状态,动态控制延迟的时间,从而达到动态控制延迟间隔的目的。
procedure DoJob(AJob:PQJob);
begin
...
if 条件1成立 then
Workers.Delay(DoJob,5*Q1Second,nil);
else
Workers.Delay(DoJob,15*Q1Second,nil);
end;