我需要每隔x秒执行一个任务,并且我可以使用下面的代码完成这个目标:
var task: ITask; begin task := TTask.Create( procedure() begin //infinite loop while 1 = 1 do begin //time interval sleep(15000); //do something every x seconds end; end); task.Start;
但是,使用sleep(x)时,我无法在任何时候完成任务,例如,当我关闭表单时(我正在使用VCL)。
有什么办法可以在固定的时间间隔内无限地执行一项任务,但有可能在不等待睡眠完成的情况下中断任务?不过,我不太明白这篇文章是怎么用的。
不要睡觉,使用一个可等待的对象,比如TEvent,并在你想结束任务时给它发信号。等待对象X秒。如果有信号,请退出。如果超时,请执行任务。循环重复