gpt4 book ai didi

delphi - 仅在线程/计时器内执行一次命令但保持线程/计时器运行?

转载 作者:行者123 更新时间:2023-12-02 01:29:44 25 4
gpt4 key购买 nike

这是线程内代码的一部分(或者它可能是一个计时器,没关系):

timenow := Now;
strtime := FormatDateTime('hh:nn:ss', timenow);
if frmBackup.getmetime = strtime then
begin
frmBackup.lawl.Position := frmBackup.lawl.Position + 10;
end;

基本上,进度条只是一个测试,以了解它已经执行了多少次。到目前为止,我无法多次阻止它执行。我需要它执行一次(当 getmetime = strtime 时),然后继续线程/计时器而不执行代码,只在时间到来时再次执行它。

可能吗?

谢谢!

最佳答案

在 frmBackup 上放置一个 bool 标志:

timenow := Now;
strtime := FormatDateTime('hh:nn:ss', timenow);
if (frmBackup.getmetime = strtime) and (not frmBackup.RanOnce) then
begin
frmBackup.lawl.Position := frmBackup.lawl.Position + 10;
frmbackup.RanOnce := true;
end;

此外,尝试使用 = 来比较时间时要小心。如果您的计时器比您的目标时间晚触发一秒,无论出于何种原因,您的代码都会失败。最好使用 >= 或在比较中建立一些误差范围。 (并使用直接 TDateTime 比较而不是字符串比较。)

还有一件事:如果您实际上在另一个线程中(而不是在同一线程上运行的计时器),则更新 VCL 控件将以奇怪的方式失败,因为底层 Windows API 内容具有线程关联性你的程序的主线程。如果您打算这样做,请查看 TThread.SynchronizeTThread.Queue 并使用其中之一进行 UI 更新。

关于delphi - 仅在线程/计时器内执行一次命令但保持线程/计时器运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com