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
-
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 einpostEvent
undsendEvent
. 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/f51Grü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.