Frage zu Threads



  • Hi Leute,

    Ich hoffe es kann mir einer von euch sagen wie man zwischen zwei Threads in einem Programm einen Audio/Video-Stream hin und her "schickt".

    Ich verwende C++ und Ubuntu 8.10

    Mfg XBert



  • Threads laufen im gleichen Prozess und teilen sich die Daten. Wenn der eine Thread auf eine Resource, wie z. B. einen Video-Stream zugreifen kann, dann kann der andere Thread genauso darauf zugreifen. Warum solltest Du ihn von einen Thread zum anderen Schicken? Wenn der andere Thread ihn lesen will, dann kann er es einfach tun. Deine Frage macht so keinen Sinn.



  • Bei der Frage kann ich dir nur raten, lass die Finger von threads.



  • XBert schrieb:

    Ich hoffe es kann mir einer von euch sagen wie man zwischen zwei Threads in einem Programm einen Audio/Video-Stream hin und her "schickt".

    z.b. indem man 'stream-taugliche' datenstrukturen verwendet, wie etwa FIFOs.
    🙂



  • Gut ich glaube die Frage war etwas unglücklich formuliert.

    Ich möchte in einem Thread eine Audiosequenz erzeugen/bearbeiten, und den dann an einen anderen Thread weitergeben,
    der sozusagen die Lautsprecher verwaltet, um zu verhindern dass zwei Töne gleichzeitig zu hören sind. Denn auch ein anderer Thread kann eine Audiosequenz erzeugen und möchte diese abspielen.
    Deshalb wird der Thread der die zweite Sequenz erzeugt in eine Warteschleife gebracht, und erst dannach der Ton erzeugt.

    MFG



  • Gut ich glaube die Frage war etwas unglücklich formuliert.

    Ja das denke ich auch.
    Ändert aber nix daran dass die Antwort von fricky irgendwo Sinn macht.

    ----

    Grundsätzlich würde ich sagen hast du hier 2 Teile.

    1. Die "Warteliste" für Threads die gerade nicht spielen können weil schon ein anderer spielt
    2. Die FIFO (producer consumer queue) die verwendet wird um den aktuellen Audio-Stream zu übertragen

    (1) ist nichts anderes als eine Mutex mit FIFO Scheduling. Wenn die Reihenfolge in der die Threads "drankommen" egal ist (also nicht mit der Reihenfolge übereinstimmen muss in der sie "ankommen") kannst du hier eine einfache Mutex verwenden.

    (2) ist eine normale Producer-Consumer-Queue. Die "Items" die in diese Queue reinkommen kannst du nach deinen Anforderungen definieren. Könnte z.B. so einfach sein wie ein boost::shared_ptr<std::vector<audio_sample> >.

    ---

    Beides lässt sich mit ein paar Standard-Containern, Mutexen und Condition-Variablen (oder alternativ Events) implementieren.

    Wenn du das nicht hinbekommst schreib bitte etwas genauer *womit* du Probleme hast.



  • Danke für die Antwort, ich werd mich mal in die Thematik einarbeiten und mich wieder melden wenn ich fragen habe.

    Im Nachinein habe ich auch gemerkt das fricky mir schon einen sehr guten Tipp gegeben hat. Hab aber den Beitrag zu voreilig geschrieben.

    MFG XBert


Anmelden zum Antworten