Ich vermute auch das "CleanupInstance" da nicht hingehört, kommentiere das mal aus.
Statt den Timer immer wieder aus und ein zu schalten, ist es vieleicht besser die vergangene Zeit seit dem letzen Aufruf zu testen.
Delphi-Quellcode:
procedure Hauptschleife(Owner: TObject);
private
SteuerungAktiv: Boolean;
NextStart: TDateTime;
procedure DoSteuerung;
end;
implementation
const
StartIntervall = 1{s} /24/60/60;
Startverzoegerung = 10{s} /24/60/60;
function NowUTC: TDateTime;
var
SystemTime: TSystemTime;
begin
GetSystemTime(SystemTime);
Result := SystemTimeToDateTime(SystemTime);
end;
procedure THauptformular.Hauptschleife(Owner: TObject);
begin
if not SteuerungAktiv then
begin
SteuerungAktiv := True;
if NowUTC >= NextStart then
begin
NextStart := NextStart + StartIntervall; // alternativ NowUTC + StartIntervall
DoSteuerung;
end;
SteuerungAktiv := False;
end;
end;
procedure THauptformular.Counterstop(Owner: TObject);
Begin
TimerEx1.Enabled:=False;
end;
procedure THauptformular.CounterStart(Owner: TObject);
Begin
NextStart := NowUTC + Startverzoegerung;
TimerEx1.Enabled:=True;
end;