![]() |
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] |
Re: Timer_Schleife
Wenn ich (Sprung-)Lables sehe bekomme ich immer Bauchweh :pale:
|
Re: Timer_Schleife
Zitat:
|
Re: Timer_Schleife
Zitat:
Einfach ein Timer, wenn der ausgelöst wird in DB schreiben und fertig. Was soll denn dein Sprung nach "Sprung1"? |
Re: Timer_Schleife
Zitat:
z.B. 13:49:57 ->Sprung 13:49:58 ->Sprung 13:49:59 ->Sprung 13:50:00 ->in DB schreiben |
Re: Timer_Schleife
Zitat:
z.B. 13:49:57 ->Tu nichts 13:49:58 ->Tu nichts 13:49:59 ->Tu nichts 13:50:00 ->in DB schreiben 13:50:01 ->Tu nichts usw. |
Re: Timer_Schleife
Hab nen Timer gesetzt, der die Uhrzeit prüft und wenn volle 10Min erreicht sind, dann schreibt er in Db,allerdings dieselbe Zeile 42mal
|
Re: Timer_Schleife
Dann machst Du wohl etwas falsch :glaskugel:
|
Re: Timer_Schleife
Also wenns wirklich immer schön die volle Minute sein soll, würde ich das so machen:
Delphi-Quellcode:
Aber ist nur so ne Idee :angel:
// OnTimer
begin if (MinuteOf(Now) mod 10 = 0) and SecondOf(now) = 0 then // runde 10 Minuten, Bedingung nochmal überprüfen begin // Machwas Timer1.Interval := 570*1000; // 9 Minuten und 30 Sekunden end else begin Timer1.Interval := 400; // 0,4 Sekunden, damit sollte sichergestellt sein // dass es ein Timer-Event gibt, wenn die Sekunden 0 sind. end; end; |
Re: Timer_Schleife
Zitat:
[Edit: ok ok, das kann bei dir gar nicht passieren] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 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-2025 by Thomas Breitkreuz