Wie Funktion direkt nach beenden eines boost::thread aufrufen?



  • Hai
    Frage im Titel. Ich habe im main thread leider die Hauptschleife nicht (da Qt die message queue hat) daher muss ich die Funktion tatsächlich aufrufen und kann nicht nur eine variable setzen, die ich dann in einer Hauptschleife abfragen würde (wäre meine erste Idee gewesen).
    Hat jemand eine Idee?



  • Indem du die Funktion noch IM thread als letztes aufrufst?



  • boost::thread und Qt? Komische Kombination.

    In welchen Thread soll die Funktion denn idealerweise aufgerufen werden? Im Qt-Message-Loop-Thread? Das geht bestimmt irgendwie. In Java gab es eine invokeLater-Funktion, die ein Runnable-Objekt entgegen nimmt, welches dann irgendwann vom MessageLoop ausgeführt wird. Ich kann mir vorstellen, dass es so etwas auch in Qt gibt.



  • pumuckl schrieb:

    Indem du die Funktion noch IM thread als letztes aufrufst?

    Geht leider aus zwei gründen nicht:
    ich kann von Qt aus keine Widgets außerhalb des main-thread deklarieren
    die Funktion der Klasse A, die im Thread läuft der beim beenden eine Funktion rufen soll, weiß nichts von der Klasse B, die die aufzurufende Funktion enthält, und einen pointer auf B zu haben um die funktion aufzurufen würde erfordern dass sich beide klassen gegenseitig inkludieren



  • Kontrasubjekt schrieb:

    die Funktion der Klasse A, die im Thread läuft der beim beenden eine Funktion rufen soll, weiß nichts von der Klasse B, die die aufzurufende Funktion enthält, und einen pointer auf B zu haben um die funktion aufzurufen würde erfordern dass sich beide klassen gegenseitig inkludieren

    Dafür gibt es in Qt doch signal/slot



  • ich bin mir zwar nicht sicher, aber benutzt Qt nicht auch die Windows-MessageLoop, da könntest du per

    ::PostThreadMessage(trheadId, WM_..., 0, NULL);
    

    eine vorher definierte Message aufrufen lassen.

    Bzw. wenns nicht die Windows-MessageLoop ist, dann wird es wahrscheinlich ein Pedant dazu geben.

    MfG marco


  • Administrator

    Du müsstest dem Qt-Event-Loop vor dem Beenden aus dem Thread heraus eine Nachricht schicken. Ich kenne mich zwar nicht mit Qt aus, aber in QApplication gibt es ein postEvent und sendEvent . Diese dürften eigentlich dafür vorhanden sein.

    Ansonsten sollte ein Mod (nicht ich) dich wohl mal nach weiter oben verschieben:
    http://www.c-plusplus.net/forum/f51

    Grüssli



  • manni66 schrieb:

    Dafür gibt es in Qt doch signal/slot

    hm.
    Ich könnte A von QObject ableiten, beim beenden der Funktion ein signal senden und das einfach mit einer funktion connecten.
    Das problem ist das A einen copy-konstruktor hat & QObject nicht kopierbar ist. Ich könnte auf pointer umstellen aber A müsste eventuell mal per = kopiert werden(hab die Klasse nicht geschrieben, weiß jetzt nicht 100%). Trotzdem, ne Möglichkeit. Danke.

    @marc-o ist auch eine idee, danke.



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x und C++11) in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten