【问题标题】:Set timer to pause设置定时器暂停
【发布时间】:2011-12-13 05:49:03
【问题描述】:

如何在 Delphi 中暂停 TTimer 并保持间隔?因此,例如,我有 10 秒间隔TTimer,当我将计时器设置为暂停 在工作的前 7 秒 后,它将保存其状态,并且然后当我恢复计时器时,它会在剩余 3 秒后触发

非常感谢大家!

【问题讨论】:

  • 结合 Remy Lebeau 的答案和 relativ 的答案,你就有了解决方案:)

标签: delphi timer


【解决方案1】:
Timer.interval :=1000;
ICount:integer;

在创建过程中将 icount 设置为 0

Procedure timerevent(sender:tobject);
Begin
    If icount=10 then
    Begin
       // do proccess
     Icount = 0;
   End;
   Inc(icount);
End;

现在你可以在任何地方停止计时器

【讨论】:

  • +1 创意解决方案。分辨率只有 1 秒,但这可能没问题。
【解决方案2】:

您无法使用 TTimer 来做到这一点,它是对 SetTimer API 的松散包装。

为此,您需要跟踪计时器的启动时间和暂停时间。然后你就会知道还剩多少时间。当您需要暂停时,将计时器Enabled 属性设置为False,并将间隔设置为剩余时间量。不要忘记,在计时器第一次触发后,您需要将其间隔重置为真实间隔。

从上面可以看出,TTimer 并不是最适合您的问题。但是,话虽如此,生成一个支持以您希望的方式暂停的TTimer 变体并不是非常困难,而且非常有趣。

【讨论】:

  • 他说间隔是10秒!如果他需要计算定时器暂停前还剩下多少时间,他必须将定时器的间隔设置为1秒。不然他不知道还有多少时间!最好的答案是我的。对于您的回答大卫,他仍然需要将 settimer API 的间隔设置为 1 秒。不需要浪费时间接受我的回答,大卫已经有 79k :))
  • @relativ 定时器 api 的分辨率通常在 50 毫秒左右。我喜欢你的回答。这就是我投赞成票的原因。
  • @sertac 我不确定你在说什么。
  • @David - 我的印象是,您的回答一直有不合理的反对票。我认为投票可能来自特定用户,因此已采取措施防止此类连续投票。我当然可能错了..
  • @Sertac 我认为连续投票减少了。投票总是有点难以解释。昨天让我遇到的问题是 I/O 检查选项问题,但接受的答案已更新为非常全面,因此得到了很好的解决。
【解决方案3】:

这不是 Windows 计时器工具的工作方式,也不是 Delphi 包装器的工作方式。

当您禁用计时器时,请注意在它再次触发之前还剩多少时间。在重新启用它之前,请将 Interval 属性设置为该值。下次计时器触发时,将 Interval 重置为原始值。

【讨论】:

    【解决方案4】:

    TTimer 不支持您的要求。正如其他人已经评论的那样,您必须停止计时器,将其 Interval 重置为剩余时间,启动它,然后在触发下一个 OnTimer 事件时停止并将其 Interval 重置为 10 秒。

    一个更简单的解决方案是让TTimer 保持正常运行,并有一个单独的标志告诉OnTimer 事件处理程序是否可以在它被触发时完成它的工作,例如:

    var
      Boolean: Paused = False;
    
    procedure TForm1.Timer1Timer(Sender: TObject); 
    begin 
      if not Paused then 
      begin 
        // do proccess 
      end; 
    end; 
    
    procedure TForm1.PauseButtonClick(Sender: TObject);
    begin
      Paused := True;
    end;
    
    procedure TForm1.ResumeButtonClick(Sender: TObject);
    begin
      Paused := False;
    end;
    

    【讨论】:

    • 这不符合以粗体突出显示的问题的要求。
    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 2017-07-28
    • 2021-07-11
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多