Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Timer Starten Stoppen (https://www.delphipraxis.net/58517-timer-starten-stoppen.html)

DelphiManiac 8. Dez 2005 10:29


Timer Starten Stoppen
 
Hallo, ich habe eine Verständnisfrage zu Timern in Delphi,

ich habe ein Programm, dass einen Timer zum Abfragen einer Schnittstelle braucht:
hier werden mehrere Funktionen durchgeführt bsp:

so sieht mein Timer ungefähr aus:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
If Timer1.Tag=0 then
begin
  Timer1.Tag=1 // --> Timer wird gerade ausgeführt
  Get_Druck // Lese Druck aus
  Get_Temperatur // Lese Temperatur
  // usw usw.
  Timer1.Tag=0 // --> Timer ist fertig
end;
end;
Wenn der Timer einen Intervall von 100ms hat, heißt es doch das er wenn er aktiv ist alle 100ms in die Timer1Timer Prozedur springt oder???

Dies ist aber unabhängig davon ob die Funktionen in dem Zeitintervall abgearbeitet worden sind oder?
Oder wartet der Timer bis die Ausführung fertig ist?


Ich will den Timer stoppen können
Delphi-Quellcode:
timer1.enabled:=false;
, aber erst nachdem der Timer durchlaufen ist.

Ich habe das Gefühl der Timer, wenn er gestoppt wird stoppt sofort, d.h. die Funktionen in dem Timer werden möglicherweise nicht alle ausgführt??? Ist das richtig?


Danke schonmal führ Eure Mühen.

Gruß DelphiManiac

marabu 8. Dez 2005 10:36

Re: Timer Starten Stoppen
 
Hallo DelphiManiac,

wenn das timer event deinen Code getriggert hat, kannst du ruhig Timer.Enabled auf FALSE setzen und nach dem Abarbeiten deines Codes wieder auf TRUE - dein Code wird vollständig ausgeführt. Wenn du die eingestellten Zeitintervalle beibehalten willst, dann ist dein Ansatz mit dem Tag gut. Du musst dann aber verhindern, dass dein Code weiter ausgeführt wird, wenn sich die Ereignisse überlappen. Eventuell solltest du überlappende Ereignisse einfach in einer globalen Variable zählen und dann deinen Code sofort verlassen. Damit bleibt die Taktung erhalten.

Grüße vom marabu

jim_raynor 8. Dez 2005 11:12

Re: Timer Starten Stoppen
 
Der Timer ist sehr ungenau, da er über Windows-Messages getriggert wird. Um wirklich genau zu arbeiten, sollte man Hier im Forum suchenQueryPerformanceCounter nutzen.

Das mit dem Tag kannst du dir vermutlich sparen, da die Funktion nie mehrmals gleichzeitig ausgeführt wird. Hängt damit zusammen, dass der Timer nur eine Windowsmessage abschickt. Wenn du also in den aufgerufenen Prozeduren kein Application.ProcessMessage oder Application.HandleMessages drin hast, dann läuft die Timer-Prozedur nie mehrmals gleichzeitig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz