Thread beenden in SMFL [Gelöst]
-
Hiho,
ich versuche mich derzeit bisschen in SMFL einzuarbeiten und wollte mich an ein kleines Menü heranwagen. Dazu wollte ich in dem Menü einhergehend eine Musikschleife abspielen lassen, welche sich automatisch beendet, wenn das Menü weggeklickt oder das "Spiel" beendet wird.
Ich dachte also, dass ich mich an Threads dazu wagen müsste und hab mir voerst diesen Code geschrieben:void IntroFunction(void* UserData) { // Intro einbinden sf::Music Intro; if (!Intro.OpenFromFile(".\\musik\\intro.ogg")) return; Intro.SetLoop(true); Intro.Play(); while (Intro.GetStatus() == sf::Music::Playing) { sf::Sleep(0.1f); } }
Mit
sf::Thread IntroMusik(&IntroFunction); IntroMusik.Launch();
öffne ich dann den Thread für meine Menü-Musik (bevor ich in die While-Schleife komme um das Fenster anzuzeigen).
Nur wie bekomme ich es jetzt hin, dass sich dieser Thread schließt sobald ich zum Beispiel einen Button im Menü drücke oder das Fenster schließe?
Ich könnte zwarIntro.Terminate();
verwenden, aber was ich bisher so gelesen habe, sollte man diese Funktion ja meiden und stattdessen
Intro.Wait();
verwenden.
Da meine Musik aber in einer Schleife abläuft, würde der Thread ja somit nie enden.Wie soll ich also rangehen?
mfg Sinsei und danke im Vorfeld
-
Sinsei schrieb:
Ich dachte also, dass ich mich an Threads dazu wagen müsste und hab mir voerst diesen Code geschrieben:
Warum überhaupt?
Sinsei schrieb:
Wie soll ich also rangehen?
Einfach gar keinen zusätzlichen Thread verwenden. Deiner schläft ja sowieso nur.
-
Kann sein, dass ich mich grundsätzlich irre im Bezug auf Threads und deren Nutzen. Um meinen Gedankengang zu verdeutlichen:
1. Code für die Musik wird ausgeführt
-> Musik läuft bis zum Ende.
2. Code für das Menü aufrufen wird ausgeführtbzw., sofern ich die Musik erst in meiner Schleife für das Menü öffne:
1. Code in der Schleife wird zum Teil angefangen bis man den Teil für die Musik erreicht
2. Code für die Musik wird ausgeführt
-> Musik läuft bis zum Ende.
3. Code in der Schleife wird beendet.Heißt, ich dachte bisher, dass ich sogesehen, sobald ich die Musik aufrufe ein "Loch" habe, in dem nichts passiert (ich somit nicht im Menü navigieren kann) bis die Musik beendet ist.
mfg Sinsei
-
Sinsei schrieb:
Heißt, ich dachte bisher, dass ich sogesehen, sobald ich die Musik aufrufe ein "Loch" habe, in dem nichts passiert (ich somit nicht im Menü navigieren kann) bis die Musik beendet ist.
Hast du einfach mal ausprobiert, ob
Play
blockiert? Ich kann mir nicht vorstellen, dass es das tut.
-
Ok, hatte vorher das Intro.Play() mal in der Schleife und dachte deswegen, dass es alles blockiert (Fehler meinerseits). Hab es nun vor der Schleife.
Danke dir
-
Richtig: SFML
Falsch: SMFL