Delphi 使用TTask-Sleep选项在给定的时间间隔执行任务

Delphi 使用TTask-Sleep选项在给定的时间间隔执行任务,delphi,parallel-processing,delphi-10.3-rio,Delphi,Parallel Processing,Delphi 10.3 Rio,我需要每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

我需要每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的文章,但是我不太明白它是如何工作的。

不要使用Sleep,而是使用一个可等待的对象,例如TEvent,并在想要结束任务时发出信号。在对象上等待X秒。如果发出信号,退出。如果超时,请执行该任务。在循环中重复

请参见,不要调用
Sleep()
,只需调用事件
WaitFor(15000)
方法即可。如果事件发出信号,则中断任务,否则只执行循环工作任务。我将尝试它。谢谢