AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Timer_Schleife

Ein Thema von chicky · begonnen am 12. Aug 2009 · letzter Beitrag vom 12. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
chicky

Registriert seit: 11. Aug 2009
40 Beiträge
 
#1

Timer_Schleife

  Alt 12. Aug 2009, 12:26
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.?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Timer_Schleife

  Alt 12. Aug 2009, 12:32
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"
  Mit Zitat antworten Zitat
chicky

Registriert seit: 11. Aug 2009
40 Beiträge
 
#3

Re: Timer_Schleife

  Alt 12. Aug 2009, 12:53
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.)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Timer_Schleife

  Alt 12. Aug 2009, 12:57
Delay() wartet aktiv.
Entwder 2 Timer verwenden oder Intervall entsprechend umswitchen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Timer_Schleife

  Alt 12. Aug 2009, 13:00
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Fabian Classen

Registriert seit: 11. Aug 2009
Ort: Schleiden
5 Beiträge
 
Delphi 7 Enterprise
 
#6

Umgang mit boolischen Werten

  Alt 12. Aug 2009, 13:10
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
MFG
Fabian
  Mit Zitat antworten Zitat
chicky

Registriert seit: 11. Aug 2009
40 Beiträge
 
#7

Re: Timer_Schleife

  Alt 12. Aug 2009, 13:31
Danke dir Fabian. Ich bin halt noch relativer Anfänger. Aber vielen Dank

Zitat:
..oder Intervall entsprechend umswitchen
Wie meinst du das?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Timer_Schleife

  Alt 12. Aug 2009, 13:42
im onTimer Intervall verkürzen
Markus Kinzler
  Mit Zitat antworten Zitat
chicky

Registriert seit: 11. Aug 2009
40 Beiträge
 
#9

Re: Timer_Schleife

  Alt 12. Aug 2009, 13:45
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.
  Mit Zitat antworten Zitat
chicky

Registriert seit: 11. Aug 2009
40 Beiträge
 
#10

Re: Timer_Schleife

  Alt 12. Aug 2009, 14:19
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]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16: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