![]() |
Timer_Schleife
Delphi-Quellcode:
MyTimer := TTimer.Create(nil);
MyTimer.Enabled := True; MyTimer.Interval := 20000; // alle $$$ Millisekunden (= $$$ Minuten) die Datenbank aktualisieren MyTimer.OnTimer := DF;
Delphi-Quellcode:
Das Problem hierbei ist, dass er den Timer zu ignorieren scheint. Er soll doch am Anfang gleich den Wert ausgeben und dann nur alle 20 Sekunden mit kleiner Verzögerung (delay(4000)). Aber er führt es ständig aus (ca. alle 3-4 Sekunden). Kann das mal jemand probieren evtl.?
procedure TMy.DF(Sender: TObject);
{var} ... begin {TString.Create usw.} ... Sprung1: WLi.DelimitedText := Werte; with t do //t : TTable begin if (check3 = true) and (check2 = false) then //check2 und check3 sind so zu Beginn definiert begin if ((SecondOf(StrToTime(WLi.Strings[1])) mod 60) = 0) then goto Sprung2 else begin delay(4000); goto Sprung1; end; end; Sprung2: begin ShowMessage(WLi.Strings[1]); check2 := true; check3 := false; delay(4000); end; end; end; {alles wieder Free usw.} ... end; |
Re: Timer_Schleife
Du weißt schon, dass es beim Aufruf von Delay passieren kann, dass der Timer auslöst, und du wieder in die Timerprozedur reinkommst?
Btw.: Du hhast möglicherweise eine Endlosschleife ... Ach und: goto's machen das Nachvervolgen des Programmablaufs nicht immer einfacher (um nicht zu sgaen: nahezu unmöglich) und sollten daher äußerst selten und wohlüberlagt eingesetzt werden. Also zur Universalfrage: Was willst du erreichen, wahrscheinlich gibt's bessere Alternativen als den "Code" ;) |
Re: Timer_Schleife
Zitat:
Zitat:
Zitat:
|
Re: Timer_Schleife
Delay() wartet aktiv.
Entwder 2 Timer verwenden oder Intervall entsprechend umswitchen |
Re: Timer_Schleife
Zitat:
Diese rufst Du dann beim Programmstart (on create oder so) auf. Dann nimmst Du einen Timer mit einem 20 Sekunden intervall und rufst in seiner OnTimer Methode die Procedure zum schreiben in die DB auf. |
Umgang mit boolischen Werten
|
Re: Timer_Schleife
Danke dir Fabian. Ich bin halt noch relativer Anfänger. Aber vielen Dank
Zitat:
|
Re: Timer_Schleife
im onTimer Intervall verkürzen
|
Re: Timer_Schleife
Das hab ich grad schon gemacht und teste jetzt. Sieht bisher gut aus. Hab das alles nochmal umgemodelt bzw. auseinader genommen und u.a. Fabians RatschlagLink befolgt.
|
Re: Timer_Schleife
Delphi-Quellcode:
Funktioniert insofern, als dass z.B. um 14:20:00 ein Eintrag in die DB vorgnommen wird. Aber der gleiche 2mal. Wie kann das kommen?
Sprung1 : {...neuen Wert holen...}
if ((SecondOf(StrToTime(WLi.Strings[1])) mod 60) = 0) and ((MinuteOf(StrToTime(WLi.Strings[1])) mod 10) = 0) then //volle 10 Minuten begin {...in DB schreiben...} end else //noch keine vollen 10 Min erreicht begin delay(5000); //Zeitverzögerung, um nächsten Messwert zu checken goto Sprung1; end; [edit=mkinzler]Tag korrigiert Mfg, mkinzler[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz