Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Timer_Schleife (https://www.delphipraxis.net/138545-timer_schleife.html)

chicky 12. Aug 2009 11:26


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:
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;
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.?

jfheins 12. Aug 2009 11:32

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" ;)

chicky 12. Aug 2009 11:53

Re: Timer_Schleife
 
Zitat:

Du weißt schon, dass es beim Aufruf von Delay passieren kann, dass der Timer auslöst, und du wieder in die Timerprozedur reinkommst?
Nein, das wusste ich nicht. Und nun?

Zitat:

Btw.: Du hhast möglicherweise eine Endlosschleife ...
Wie kommst du darauf?

Zitat:

Was willst du erreichen
Ich möchte, dass bei Programmstart etwas in eine DB geschrieben wird und dann alle 20 Sekunden einer neuer Eintrag hinzukommt (z.B.)

mkinzler 12. Aug 2009 11:57

Re: Timer_Schleife
 
Delay() wartet aktiv.
Entwder 2 Timer verwenden oder Intervall entsprechend umswitchen

Sharky 12. Aug 2009 12:00

Re: Timer_Schleife
 
Zitat:

Zitat von chicky
... Ich möchte, dass bei Programmstart etwas in eine DB geschrieben wird und dann alle 20 Sekunden einer neuer Eintrag hinzukommt (z.B.)

Dann schreibe Dir doch eine Procedure welche die Einträge in der DB vornimmt.
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.

Fabian Classen 12. Aug 2009 12:10

Umgang mit boolischen Werten
 
Hi
was mir auch noch aufgefallen ist, dass du auch True und False in deiner if-Anweiseung prüfst.
Das macht man nicht! ;) Guck dir mal dieses Tutorial an: Klick
und besonders diese Seite des Tutorials: Klick

chicky 12. Aug 2009 12:31

Re: Timer_Schleife
 
Danke dir Fabian. Ich bin halt noch relativer Anfänger. Aber vielen Dank

Zitat:

..oder Intervall entsprechend umswitchen
Wie meinst du das?

mkinzler 12. Aug 2009 12:42

Re: Timer_Schleife
 
im onTimer Intervall verkürzen

chicky 12. Aug 2009 12:45

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.

chicky 12. Aug 2009 13:19

Re: Timer_Schleife
 
Delphi-Quellcode:
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;
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?

[edit=mkinzler]Tag korrigiert Mfg, mkinzler[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr.
Seite 1 von 2  1 2      

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