Servus,
ich würde von euch mal gerne wissen, wie ihr das folgende Problem löst:
Nehmen wir an, wir haben eine GUI mit ein paar Schiebereglern, und wir haben im Backend irgendetwas, was durch diese Schieberegler gesteuert werden kann. Sagen wir einfach mal, einer dieser Regler heißt "Lautstärke". Wenn diese geändert wird, wird das GUI-Event ausgewertet und dann im Backend eine setVolume()-Funktion aufgerufen.
Soweit, sogut. Aber unter Umständen kann es ja auch wünschenswert sein, daß die Lautstärke programmatisch gesteuert wird, z.B. weil jemand ein Config-File einliest. Wenn nun setVolume() aufgerufen wird, soll ja wiederum auch in der GUI der Schieberegler auf die richtige Position eingestellt werden.
Dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies.... ihr wißt, was ich meine :autsch:
Natürlich kann man dies verhindern. Zum Beispiel indem man beim Lautstärke-setzen immer dasjenige Objekt mitübergibt, welches das Kommando gesendet hat, um dann zu überprüfen, ob man kurz davor ist, solch einen Zyklus auszulösen. Oder man kann zwei verschiedene Funktionen machen, eine setVolume() und eine setVolumeFromGui(), aber das ist auch nicht gerade schön. Oder man könnte mit den Funktionsaufrufen aufhören, wenn man bemerkt, daß sich der Wert gar nicht geändert hat. Aber das ist schon wieder sehr speziell irgendwie...
Wie löst man das "richtig"?
ich würde von euch mal gerne wissen, wie ihr das folgende Problem löst:
Nehmen wir an, wir haben eine GUI mit ein paar Schiebereglern, und wir haben im Backend irgendetwas, was durch diese Schieberegler gesteuert werden kann. Sagen wir einfach mal, einer dieser Regler heißt "Lautstärke". Wenn diese geändert wird, wird das GUI-Event ausgewertet und dann im Backend eine setVolume()-Funktion aufgerufen.
Soweit, sogut. Aber unter Umständen kann es ja auch wünschenswert sein, daß die Lautstärke programmatisch gesteuert wird, z.B. weil jemand ein Config-File einliest. Wenn nun setVolume() aufgerufen wird, soll ja wiederum auch in der GUI der Schieberegler auf die richtige Position eingestellt werden.
Dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies würde nun aber wieder das GUI-Event auslösen, welches wiederum die Lautstärke setzt, und dieses Lautstärkesetzen würde wieder die GUI aktualisieren, und dies.... ihr wißt, was ich meine :autsch:
Natürlich kann man dies verhindern. Zum Beispiel indem man beim Lautstärke-setzen immer dasjenige Objekt mitübergibt, welches das Kommando gesendet hat, um dann zu überprüfen, ob man kurz davor ist, solch einen Zyklus auszulösen. Oder man kann zwei verschiedene Funktionen machen, eine setVolume() und eine setVolumeFromGui(), aber das ist auch nicht gerade schön. Oder man könnte mit den Funktionsaufrufen aufhören, wenn man bemerkt, daß sich der Wert gar nicht geändert hat. Aber das ist schon wieder sehr speziell irgendwie...
Wie löst man das "richtig"?