![]() |
Countdown und Delay
Hallo,
ich lese inzwischen schon länger hier mit, und habe mir auch schon einige gute Ideen hier entnehmen können. Leider habe ich für mein aktuelles Projekt bis jetzt noch keine zufriedenstellende Lösung gefunden. Es geht dabei um ein Testprogramm was Zahlen für Testreihen generiert und die Auswirkungen dieser Testreihen nach einer gewissen Zeit protokolliert. Mein bisheriger Ansatz sieht ungefähr so aus:
Delphi-Quellcode:
Die procedur CountdownOn schaltet einen Timer an und zwei Buttons und Edit-Felder aus (Enabled:=false;)
procedure test;
begin //Testreihen gernerieren //Ausgabe Wartezeit:=random(60001); CountdownOn(Wartezeit); //Test auswerten Pausenzeit:=random(18001); CountdownOn(Pausenzeit); end; Der Timer steuert sowohl das die einzelnen Zeit entsprechend sich vergrößern, aber auch, dass die verbleibende Pausenzeit ausgegeben wird. Beim Erreichen der Wartezeit schaltet der Timer sich wieder ab, das ist nicht das Problem. Mein Problem liegt darin, dass der Timer anläuft, aber gleichzeitig weiter die Prozedur test abgearbeitet wird, was ich nicht möchte. Ich habe schon mit sleep und delay experimentiert, aber diese Lösung waren für mich nicht zufriedenstellend, da die zeitlichen Abweichungen zu groß waren bzw. das Programm gar nicht mehr reagierte. Könnt ihr mir weiter helfen? Martin Schmidt. |
Re: Countdown und Delay
wie wäre es mit einer Bool variable, die abgefragt wird und wenn der Timer läuft true ist, sonst false
Delphi-Quellcode:
procedure test;
begin if not TimerRuns then begin //Testreihen gernerieren //Ausgabe Wartezeit:=random(60001); CountdownOn(Wartezeit); //Test auswerten Pausenzeit:=random(18001); CountdownOn(Pausenzeit); TimerRuns := True; end; end; im Timer (am Ende) TimerRuns wieder auf False |
Re: Countdown und Delay
Die Lösung klingt interessant und würde wahrscheinlich auch funktionieren, wenn die Prozedur test nur einmal aufgerufen wird. Da sie aber in einer Repeat-Until-Schleife liegt kann ich über diese Funktion nicht sicher stellen, dass das Programm da wartet, wo es warten soll, d.h. mit dieser Lösung würden weitere Testreihen generiert werden, nachdem TimerRuns wieder auf false ist.
Martin. |
Re: Countdown und Delay
Da ich mich jetzt schon so halb in das Wochenende verabschiede (d.h. ich habe keinen Zugriff mehr auf meinen privaten Rechner), möchte ich euch noch kurz etwas mehr Code zu meinem Problem geben. Vielleicht hilft das weiter.
Delphi-Quellcode:
Martin Schmidt.
procedure CountdownOn(Zeit:Int64);
//Schaltet den Countdown an begin counter:=Zeit; Form_test.Button_Start.Enabled:=false; Form_test.Edit_maxDurchl.Enabled:=false; Form_test.Timer_CountDown.Enabled:=true; end; //END CountdownOn procedure CountdownOff; //Schlatet den Countdown aus begin Form_test.Timer_CountDown.Enabled:=false; Form_test.Button_Start.Enabled:=true; Form_test.Edit_maxDurchl.Enabled:=true; end; //END CountdownOff procedure test; // Startet den Test begin //Initalisierung repeat //Testreihen gernerieren //Ausgabe Wartezeit:=random(60001); CountdownOn(Wartezeit); //Test auswerten Pausenzeit:=random(18001); CountdownOn(Pausenzeit); until {Abbruchbedingung}; //Daten speichern end; //END test procedure TForm_test.Timer_CountDownTimer(Sender: TObject); //Timer begin counter:=counter-1000; Label_Wartezeit.Caption:='Verbleibende Wartezeit: '+IntToStr(round(counter/1000))+' s'; If counter<=0 then CountdownOff; end; //END Timer_CountDownTimer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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