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 stoppen

    Timer1->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 ob

    while(...)
    {
      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.


Anmelden zum Antworten