Aber nicht in einer GUI-Umgebung. In einem Kommandozeilenprogramm wäre eine repeat-schleife sicher die richtige Idee, in einem GUI-Programm aber nicht.Zitat
Ich versuch es mal anschaulich zu erklären:
Wenn du eine GUI-Applikation schreibst verzahnst du dein Programm eng mit der Funktionsweise von Windows. Sprich, Windows überwacht für dich den gesamten Userinput, also Mausbewegungen, Mausklicks und Tastendrücke. Wenn Windows nun merkt "Der Benutzer hat die linke Maustaste gedrückt" guckt Windows welches offene Programm gerade den Fokus hat und benarichtigt dieses Programm über dieses Ereigniss, indem es eben dem Programm eine Message sendet.
Das Programm wiederrum empfängt diese Message, verarbeitet diese und wartet wiederrum auf neue Messages.
Das Problem bei deinem Programm und der Schleife ist, der Verarbeitungsprozess der Nachricht "Button wurde angeklickt" ist erst beendet wenn die aufgerufene Funktion zuende ist. Baust du dort nun eine Schleife ein, wird dieser Prozess erst beendet wenn die Schleife beendet ist. Solange dieser Prozess aber nicht beendet wird, wird dein Programm auf neue Nachrichten von Windows nicht reagieren, also auch nicht auf neuen Userinput. Wenn du eine solche Schleife benutzt musst du auch innerhalb der Schleife selber dafür sorgen, daß sie irgendwann verlassen wird. Alles andere ist eine Endlosschleife. Bei deinem Code bricht die Schleife nur ab wenn eine Variable eine bestimmte Bedingung erfüllt, nur da die Variable innerhalb der Schleife nicht verändert wird gibt es nur 2 Möglichkeiten:
- Die Schleife bricht sofort ab da die Variable die Bedingung erfüllt
- Die Schleife bricht nie ab, da die Variable die Bedingung nicht erfüllt und auch nicht geändert wird
Wenn du willst, daß etwas geändert wird sobald Bedingung X erfüllt ist, aber gleichzeitig den normalen Programmablauf nicht unterbrechen willst (da du noch auf Userinput reagieren willst) musst du dich eben da einhaken wo eine Funktion periodisch immer aufgerufen wird, ein Timer wie Ineluki es im Beispiel benutzt wäre da eine Lösung.