Zirkulierende Events



  • Hallo zusammen,

    ich kenne den Fachbegriff nicht, deshalb hat die Suche auch nichts ergeben. 😎

    Ein Problem über das ich immer wieder stolpere:

    Der Benutzer soll s.B. den Idx einer Musik Playlist ändern können. Gleichzeitig soll aber auch die Software den Idx erhöhen können, s.B. wenn das Lied zu Ende ist.

    Benutzer -> PlayList(PlayListIdx) <=> Player(PlayListIdx) <- Idx++ durch Software

    Das Problem das ich habe ist jetzt, das die Erhöhung des idx duch den Benutzer den Player informieren muss(Event) und gleichzeitig der Player die Playlist informieren muß. Und das führt natürlich zu einem Stacküberlauf.

    Ich kenne zwar das Prinzip das Problem über eine Variable zu umgehen, bin aber nicht glücklich damit.

    Gibt es da einen besseren Ansatz?



  • Schau dir mal das Obersver Pattern an.
    Gibt dazu auch einen schönen Artikel hier im Forum



  • Donako schrieb:

    Das Problem das ich habe ist jetzt, das die Erhöhung des idx duch den Benutzer den Player informieren muss(Event) und gleichzeitig der Player die Playlist informieren muß. Und das führt natürlich zu einem Stacküberlauf.

    Warum führt das zum Stacküberlauf? Es kommt drauf an, die richtigen Events zu definieren.

    Der Benutzereingriff "NextSong" ist ein Event, der aus der GUI kommt und an die Playlist geht. Die Playlist feuert anschließend "SongChanged" an den Player. Der stoppt den laufenden Song und wechselt auf den nächsten und kann, wenn er will, noch "SongStarted" an die Playlist schicken, damit die den richtigen Song highlightet, nachdem der Wechsel erfolgreich vollzogen wurde.

    Wenn der Player ein Lied zuende gespielt hat, kommt "SongEnded", was die Playlist veranlasst, den nächsten Song auszuwählen und wie oben mit "SongChanged" anzukündigen.

    Ich sehe da nix Zyklisches.

    "SongEnded" kommt nur, wenn der Song tatsächlich sein Ende (d.h. die letzte Sekunde) erreicht hat, und nicht, wenn er durch Benutzeraktionen wie "NextSong" oder "Stop" abgebrochen wird.



  • @Printe hab ich so gemacht Danke

    @axels mach ich so wenn ich mal wirklich das Prob habe, Danke


Anmelden zum Antworten