Problem mit einer Schleife
-
N'Abend

ich möchte IN einer for-Schleife WÄHREND ein bool Wert=true ist eine bestimmte Aktion alle 2 Sekunden wiederholen.
Wie mache ich das?
Also das Problem ist das mit den 2 Sekunden.while(Wert==true) { // Sollte ich einen Timer benutzen? Aber wie schaffe ich das, dass Timer->Enabled=false gesetzt wird wenn der Wert==false ist? }
-
Wenn du etwas machen willst, während du zugleich etwas anderes machen willst, ist das ein Fall für Threads.
-
Hallo
Oder mit dem Timer : Du setzt beim Timer zur Entwurfszeit Enabled auf false.
Nun kannst du vor deiner Schleife den Timer starten und nach der Schleife wieder stoppenTimer1->Enabled = true; while(Wert==true) { ... // Nötig damit Timer verarbeitet wird Application->ProcessMessages(); } Timer1->Enabled = false;Wichtig ist aber das die Schleife nur über die Abbruchbedinung beendet wird, nicht zum Beispiel über ein internes return oder gar eine Exception wegen Fehlern.
try/catch/finally bieten sich da an.Für eine auch in Extremfällen saubere und sichere Implementation ist wie schon gesagt allerdings TThread besser geeigneter.
bis bald
akari
-
Danke!!
Ich hab nocheine Frage wegen dem Application->ProcessMessages();:
Ist es egal ob es am Anfang oder am Ende der Schleifekommt?
Also obwhile(...) { Application->ProcessMessages(); ... }oder
while(...) { ... Application->ProcessMessages(); }
-
Hallo
das dürfte nur eine marginale Rolle spielen, ich würde ProcessMessages als letztes schreiben.
bis bald
akari
-
Ich würde auf jeden Fall das
while (Wert==true)in
while (Wert)ändern.
Wenn du das nämlich immer (==true) machst, läufst du Gefahr, dass du mal ein = zu wenig schreibst und dann
while (Wert=true)schreibst. Dann hängst du in einer Endlosschleife. Sowas zu finden kann sehr mühselig sein.