代码之家  ›  专栏  ›  技术社区  ›  Marcoscdoni

使用TTask-Sleep替代方法在给定的时间间隔执行任务

  •  0
  • Marcoscdoni  · 技术社区  · 4 年前

    我需要每隔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)。

    有什么办法可以在固定的时间间隔内无限地执行一项任务,但有可能在不等待睡眠完成的情况下中断任务?不过,我不太明白这篇文章是怎么用的。

    0 回复  |  直到 4 年前
        1
  •  2
  •   Remy Lebeau    4 年前

    不要睡觉,使用一个可等待的对象,比如TEvent,并在你想结束任务时给它发信号。等待对象X秒。如果有信号,请退出。如果超时,请执行任务。循环重复