thread Verständnisfrage



  • Ok, danke.
    Das gibt mir weitere Anhaltspunkte zum selbsständigen Suchen...

    Wenn ich aber nun mehr als nur einen String übergeben will, kann ich das dann mit einem Zeiger auf ein Struct, welches alles enthält was ich übergeben möchte, machen? Oder gibt es da eine elegantere Lösung?

    Gruss
    R



  • std::Robin schrieb:

    Wenn ich aber nun mehr als nur einen String übergeben will, kann ich das dann mit einem Zeiger auf ein Struct, welches alles enthält was ich übergeben möchte, machen? Oder gibt es da eine elegantere Lösung?

    Ja, das geht - und ist die eleganteste Lösung, wenn Variablen nur in Richtung Sub-Thread übergeben werden sollen. Die Übergabevariable erzeugst Du vorzugsweise mit new oder malloc und zerstörst sie dann nach Verwendung im Sub-Thread. So vermeidest Du auf einfache Weise race-conditions (unsynchronisierte Zugriffe auf die Variablen).



  • Ok, dann werde - um ganz sicher zu gehen also in der main ein Objekt mittels new dynamsich erzeugen und einen Zeiger darauf übergeben. Innerhalb des Threads müsste ich doch theoretisch darin ohne Probleme herummachen können...
    Beim Beenden des Threads wird das Objekt dann mit delete gelöscht.

    Ist das richtig so?



  • Ja.



  • Wichtig ist natürlich, dass Du das erzeugte Objekt nach Erzeugen des Sub-Threads im Haupt-Thread nicht mehr anrührst.



  • std::Robin schrieb:

    Beim Beenden des Threads wird das Objekt dann mit delete gelöscht.

    Noch besser ist es womöglich, wenn der Thread das Objekt selber entsorgt, wenn er es nicht mehr braucht.



  • CStoll schrieb:

    std::Robin schrieb:

    Beim Beenden des Threads wird das Objekt dann mit delete gelöscht.

    Noch besser ist es womöglich, wenn der Thread das Objekt selber entsorgt, wenn er es nicht mehr braucht.

    So war es gemeint und wurde es (denke ich) auch verstanden.



  • Hmm, eigentlich wollte gerade dazu übergehen ich dieses Objekt auch dazu zu gebrauchen Rückgabewerte zu übergeben....

    Spricht denn da was dagegen?

    Gruss
    R



  • @mgs: Da habe ich mich wohl etwas verlesen.

    @Robin: Nein, da spricht nichts dagegen. Du mußt nur dem Hauptthread irgendwie mitteilen, wann das Ergebnis jetzt vorliegt (z.B. in einer eigenen bool-Variable oder über Synch-Objekte (d.h. das Thread-Ende oder einen Hilfsevent per WaitFor...() abfangen)).
    Und du benötigst eine gemeinsame Critical Section, über die du die Zugriffe auf dein Objekt koordinierst.



  • std::Robin schrieb:

    Hmm, eigentlich wollte gerade dazu übergehen ich dieses Objekt auch dazu zu gebrauchen Rückgabewerte zu übergeben....

    Sofern Du nicht ständig neue Sub-Threads mit neuen Variablen erzeugst, würde ich in diesem Fall eher eine globale Variable empfehlen mit Synchronization durch CriticalSections. Gibt weniger Zuständigkeitsprobleme beim Zerstören der (sonst dynamisch erzeugten) Variablen-Objekte.

    Signalisierung von Statusänderungen der Worker-Threads lassen sich in Windows-Programmen (mit Message-Queue) sehr schön durch PostMessage an den Haupt-Thread übermitteln. Einfache int-Ergebnisse können so gleich mit übermittelt werden.


Anmelden zum Antworten