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/)
-   -   TTimer abfragen, wann er wieder auslöst? (https://www.delphipraxis.net/156636-ttimer-abfragen-wann-er-wieder-ausloest.html)

HJay 9. Dez 2010 11:30

TTimer abfragen, wann er wieder auslöst?
 
Ich habe einen TTimer mit z.B. Interval = 60000 msec. (1 min)

Ich würde nun gerne von einer anderen Prozedur aus abfragen, WANN der Timer das nächste Mal auslösen wird, also wie eine Countdown-Abfrage (z.B "in 43222 msec"). Der Sinn dahinter ist, dass ich eine Datenbank regelmäßig mit neuen Messwerten fülle, aber auch manuelle Eingaben des Nutzers möglich sind. Ich würde nun gerne nur dann eine extra DB-Aktualisierung durchführen, wenn die Timer-Aktualisierung noch lange nicht dran ist... nicht aber, wenn sie sowieso in ein paar Sekunden erfolgen würde und sich ggf. sogar überlappt.

Kann man abfragen, wie der Timer gerade steht?

holliesoft 9. Dez 2010 11:45

AW: TTimer abfragen, wann er wieder auslöst?
 
Nicht direkt per Eigenschaft, aber Du musst Dir doch nur die Uhrzeit der letzten Aktualisierung merken, und zur Prüfung den Timerintervall hinzufügen und von dem Ergebnis die aktuelle Uhrzeit abziehen.

himitsu 9. Dez 2010 12:26

AW: TTimer abfragen, wann er wieder auslöst?
 
Laß denTimer alle einer Sekunde auslösen und zähle intern eine Variable von 59 (60) runter ... bei 0 wird die Variable wieder auf 59 gesetzt und der/die Befehl(e) verarbeitet.
Wenn du nun diese Variable ausließt, dann hast du deinen Countdown.

HJay 17. Dez 2010 16:09

AW: TTimer abfragen, wann er wieder auslöst?
 
Danke für Eure Vorschläge.

Sir Rufo 17. Dez 2010 17:02

AW: TTimer abfragen, wann er wieder auslöst?
 
Geschickter wäre es ja den Timer bei einer Abfrage (egal ob automatisch oder manuell ausgelöst) zu disablen und nach der Abfrage wieder Enablen.

Dann überlappt nix und es wird immer frühestens nach dem Intervall ein Update durch den Timer angestossen.

Rupert 30. Sep 2021 09:45

AW: TTimer abfragen, wann er wieder auslöst?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1069147)
Geschickter wäre es ja den Timer bei einer Abfrage (egal ob automatisch oder manuell ausgelöst) zu disablen und nach der Abfrage wieder Enablen.
Dann überlappt nix und es wird immer frühestens nach dem Intervall ein Update durch den Timer angestossen.

Dieses permanente enable/disable hat dazu geführt, dass in der Windows-Zeitgeber-dll ein Fehler ausgelöst wurde, der meine Software zum sofortigen Absturz brachte. Das Problem, das ich ewig lang suchte war, dass dies zu beliebigen Zeiten passierte.
Ein erhöhen des Timers auf 2500, der 1000 war löste das Problem - ein Durchlauf der Programmschleife dauerte 1,6sec.

Rollo62 30. Sep 2021 10:20

AW: TTimer abfragen, wann er wieder auslöst?
 
Zitat:

Zitat von Rupert (Beitrag 1495579)
Dieses permanente enable/disable hat dazu geführt, dass in der Windows-Zeitgeber-dll ein Fehler ausgelöst wurde,

Hab ich noch nie gesehen, gibt es dazu ein Minimalbeispiel um das nachzuvollziehen ?

Also hier ist doch das gemeint, oder nicht, so mache ich das ständig ?
Delphi-Quellcode:
procedure TForm.Timer1Timer( Sender : TObject );
begin
    Timer1.Enabled := False;
     
    //Mache was, das länger dauern kann

    Timer1.Enabled := True;
end;

Sherlock 30. Sep 2021 12:13

AW: TTimer abfragen, wann er wieder auslöst?
 
Das ist Best Practice im Umgang mit Timern. Das geschilderte Problem muss also woanders liegen.

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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