Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

01.11.2013, 13:50

SFML - Merkwürdiges Verhalten bei Sounds

Hallo,

ich habe gerade einen einfachen Soundeffekt in mein Projekt implementiert. Dabei ist mir ein merkwürdiges Verhalten im Debugger aufgefallen.
Das äußert sich im Debugfenster mit unendlich vielen Meldungen von beendeten Threads (z.B. "Der Thread 0x4fa0 hat mit Code 0 (0x0) geendet.").
Nach exakt einer Minute (habe die Zeit mehrmals gestoppt ;)) gehen diese Meldungen los. Es werden offensichtlich mehrmals in der Sekunde Threads beendet (sind auch immer andere) und hört nicht mehr auf.
Nachdem ich den Soundkram wieder auskommentiert habe wird immer noch nach genau einer Minute ein Thread beendet. Und kurz danach noch 2-3 weitere, dabei bleibt es dann aber auch.

Dieses Verhalten tritt immer dann auf, sobald ich eine sf::Sound oder sf::SoundBuffer Variable deklariere. Daher ist meine Frage erst mal, ob dieses Verhalten normal ist, oder ob ich bei der Verwendung von Soundeffekten noch irgendwas beachten muss.

Das Ganze habe ich mit Visual Studio 2013 Express kompiliert und verwende C++ und SFML 2.1.

2

01.11.2013, 14:51

Du erstellst also ein Objekt vom Typ sf::Sound oder sf::SoundBuffer und bekommst diese Fehler? Mehr machst du nicht?
Welche SFML-Version benutzt du? Ist sie gemodded?
Hast du einen stark stilisierten Code anzubieten, der den Fehler reproduziert?
Beim Schließen kommt es ganz gerne mal zu einem Fehler, der jedoch momentan am ehesten im Individualfall zu fixen ist, da es sonst mal schnell zu undefiniertem Verhalten kommen kann. #30

MfG
Check

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Checkmateing« (01.11.2013, 14:57)


patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

3

01.11.2013, 15:02

So wie ich es verstanden habe, sind das keine Fehler sondern einfach Meldungen in Visual Studio. Entstehen dadurch irgendwelche Probleme?
Außerdem wäre etwas Code recht nett.

4

01.11.2013, 15:54

Nein, ein Fehler tritt nicht auf. Ich finde es halt nur merkwürdig und frage mich, was das für Threads sind, die dort angezeigt werden.

Das passiert sobald sf::Sound im Spiel ist. Also auch beim simpelsten Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::SoundBuffer sbPuffer;
    
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.display();
    }

    return 0;
}


Screenshot

Mich interessiert halt, was da im Hintergrund passiert und ob das eventuell später negative Folgen haben könnte. Vielleicht weiß es ja jemand :)

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »JBeh« (01.11.2013, 16:03)


patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

5

01.11.2013, 17:53

Das sorgt einfach dafür, dass der Sound im Hintergrund weiterläuft. Warum das so viele sind weiß ich nicht. Du kannst ja mal im Source von SFML herumsuchen :)

6

01.11.2013, 19:58

Ja, das ist ja auch meine Frage ;)

Fourb

Treue Seele

Beiträge: 122

Beruf: Schüler

  • Private Nachricht senden

7

01.11.2013, 20:52

Hast du schon mal probiert Sounds abzuspielen?
Warum kümmerst du dich eigentlich darum, dass Threads geschlossen werden? Solange alles funktioniert sollten dich die CPU-internen Dinge nicht im geringsten interessieren.

Frag doch Laurent, der hat die Sound Klasse geschrieben. Generell bist du bei Fragen die SFML betreffen im SFML-Forum besser dran.
42 / Pi = 13,37

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

8

02.11.2013, 11:23

Ein SoundBuffer selbst verwendet keine eigenen Threads, da der Buffer lediglich die Sound Information hält, jedoch nicht selbst etwas abspielen kann.
Wieso jetzt jedoch so einige Threads mehr gestartet werden, weiss ich auch nicht und der geschriebene Code sollte auch von sich aus keine weiteren Threads starten. Evtl. geht da der Debugger crazy, was jedoch auch nicht wirklich eine Erklärung ist.

Falls du interessiert bist was mit SFML im Hintegrund abgeht, kannst du immer den Source Code anschauen, ist in den meisten Fällen recht einfach verständlich (wenn man nicht jedes Detail verstehn will).
Falls du mehr zu den Threads erfahren willst, musst du wohl etwas mehr debuggen, d.h. in die einzelnen Threads schauen etc. Visual Studio kommt da ja mit so einigen nütlzlichen Tools daher.

Auf jeden Fall sollte es dir keine Sorgen bereiten, so lange alle Threads mit 0 beendet werden. ;)
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

02.11.2013, 12:13

Es ist jedenfalls kein Einzelfall. Bei uns tritt das Phänomen ebenfalls auf. Laut Log-Ausgabe im Visual Studio beenden sich pro Sekunde mehrere Dutzend Threads.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

10

02.11.2013, 12:57

So viele Threads zu erzeugen und dann wieder beeden ist auf jeden Fall kein Zeichen für Effizienz.
Möglicherweise kommen die Threads auch aus weiteren Abhänigkeiten wie Sndfile oder der OpenAL Implementierung.

Werbeanzeige