空闲的delphi应用程序等待计时器最安全的方法?

Seb*_*ian 4 delphi memory-management cpu-usage delphi-2010 idle-processing

我正在做一个delphi应用程序,它将在我的电脑24/7后台运行,并将检查是否必须执行某些操作,等待30分钟再次检查,依此类推.

如何确保应用程序不会因为一直运行而使CPU或内存过载.

Jus*_*ier 14

创建一个每30分钟运行一次的计时器,并从那里调用您的检查/操作.然后你的应用程序可以在无所事事时闲置.

或者,您可以创建一个仅定期运行的计划任务来执行此操作.

  • 使用Windows调度程序是IMO更好的选择.无所事事时,您的应用程序不需要驻留在内存中.已经有太多废话挥之不去...... (4认同)

Chr*_*ton 5

关于定时器的答案是很好的解决方案,我补充一点:确保定时器事件或后续调用的过程检查忙.即如果您醒来,请确保在开始新批次之前完成最后一批.当事情顺利进行时很容易错过,然后你就会有事情得到备份,整个系统在早上8点就会陷入僵局,因为午夜发生了一些不好的事情,现在已经有16个电话堆叠起来(或线程) ,过程等..).

所以写这样的计时器事件如下:

OnMyTimer...
begin
  MyTimer.Enabled := false;
  try
    DoSomethingForALongTime;  // Usually runs in 45 seconds, but sometimes takes 45 minutes!
  finally
    MyTimer.Enabled := true;  // and (SomeAbortRequest = False) and (SomeHorribleErrorCount = 0);  
  end;
end;
Run Code Online (Sandbox Code Playgroud)