Hintergrundprozesse



  • Hallo 🙂

    Ich habe ein kleines Problem mit meinem Schulprojekt. Ich möchte ein PacMan Klon in dem Terminal schreiben, was bisher recht gut funktioniert. Ein Feature finde ich aber besonders schwer: Ich möchte Sounds hinzufügen. Einfaches Abspielen von Sounddateien ist ja einfach über die Systemshell zu realisieren. Nachteil ist, dass ein Sound abgespielt werden muss bevor die nächste Funktion ausgeführt wird. Das ist besonders schön, weil die schritte verschieden schnell ablaufen und mit dem Nachteil nicht schneller als die Sounddatei sein können. Wie soll ich also Sounds "nebenbei" abspielen?
    Mein Vater sprach davon, dass ich wohl ein Tochterprozess starten muss dem ich kurze Signale sende auf die der Prozess reagiert und unabhängig vom Hauptprogramm läuft. Sollte ich diese Variante nutzen oder gibt es eine andere Möglichkeit? Wie mache ich das am besten? Und wie kann ich so einen Unterprozess starten und diesem Befehle senden?
    Ich arbeite auf Ubuntu 10.10 in dem gnome-terminal, falls das wichtig ist.

    Danke schonmal für Antworten. Mein Schulprojekt hängt davon ab ^^

    (Ich weiß nicht ob ich hier richtig bin, ich hab keine ahnung ob das vielleicht in ein anderen Thread gehört oder ob es das schon gibt, ich wusste nicht genau nach was ich suchen sollte. Mit meinen Schlagwörtern hab ich weder hier noch bei Google etwas gefunden... 🙄 )



  • Es muss nicht gleich ein anderer Prozess sein, ein zweiter Thread für die Soundausgabe wird auch reichen. Allerdings brauchts dafür schon gewisse Kenntnisse, von denen ich nicht sicher bin, ob man die als Schüler mit derartigen Projekten schon hat.
    Google-Tip: "Multithreading C++" als erste Anlaufstelle.



  • Ow, danke! Sieht stark aus dieses Multithreading. Ich werde mir das bei Google mal ansehen und berichten wenn ich was finde. Mal sehen ob ich das hinbekomme 🙂



  • Ich hab hier ansonsten auch eine WIndows-Funktion die den Sound (NUR .wav) abspielen kann:

    void sound(const char *name) {
    	PlaySound(name, NULL, SND_ASYNC && SND_LOOP);
    }
    

    Dafür musst du allerdings die lib winmm mitlinken.



  • Die Funktion kenne ich, danke 🙂
    Aber die kann auch lediglich Sound abspielen aber nicht gleichzeitig andere Funktionen ausführen. Davon abgesehen nutze ich Ubuntu, also ein LinuxSystem auf dem das nicht verfügbar ist (aber dafür andere Funktionen die auch mp3 und co abspielen können ^^).
    Multithreading scheint schon das Richtige zu sein, ty 🙂



  • Nimm irrKlang. Wahnsinnig einfach zu verwenden:
    http://www.ambiera.com/irrklang/



  • Hm, scheint ja recht gut zu sein, aber kann es sein, dass es einfach nur SoundUnterstützung ist? Ich sehe keine Möglichkeit einen Sound zu pausieren oder ähnliches.
    Wär an sich ja nicht schlimm, wenn es Sounds während dem Ausführen von Funktionen ausgeben kann. Nur kann ich beispielsweise Hintergrundmelodie nicht abbrechen, wenn ich in das Pausemenü springe, oder irre ich mich da?



  • Bei solchen Fragen immer erstmal die API docs lesen:

    setIsPaused



  • Ah, genau das habe ich gesucht 🙂 . Die Liste hab ich gar nicht gefunden. Das scheint für mich als Anfänger eher geeignet zu sein. Nahezu perfekt ^^. Ich werde mich da dran mal versuchen.

    Edit: Es hat geklappt. Mein Schulprojekt ist mir mit einer 1 gelungen. Alles funktioniert genau so wie ich es mir vorgestellt habe.
    Vielen Dank euch allen 🙂 👍


Anmelden zum Antworten