Wie unterbreche ich in Lazarus einen Timer?
Hallo,
Ich habe in Lazarus einen Timer, der seine Aufgaben macht, dabei liegt der Intervall auf 18,6 Sekunden (Ja, der brauch so lange um alle Aufgaben abzuarbeiten).
Ich habe auch eine Tastenabfrage programmiert, damit der Timer deaktiviert wird (Timer1.Enabled:= False;).
Das Problem ist, dass der Timer auch direkt abbrechen soll und seine Aufgaben nicht bis zum Ende des Intervalls machen soll soll.
1 Antwort
Nicht so einfach. Ein Timer ist kein eigener Thread, sondern läuft im MainThread der Anwendung. Während die Timerfunktion läuft passiert nix Anderes, wenn du nicht dafür sorgst.
Du kannst in der Funktion, die der Timer ausführt, an passenden Stellen eine Abbruchbehandlung einfügen, also z.b.
Application.ProcessMessages;
if (not Timer1.enabled) then begin
// Aufräumen
exit;
end;
Das Application.ProcessMessages sorgt dafür, dass erstmal ausstehende andere Ereignisse, wie z.B. ein Klick auf einen Abbrechen-Button, überhaupt verarbeitet werden. Wenn dann der den Timer deaktiviert, sorgt der Code danach für den Abbruch der Timerfunktion. Aber das musst du eben selbst einbauen.
Wenn wirklich etwas parallel passieren soll, schaue dir TThread an...