GUI-Elemente in seperatem Thread erzeugen - Probleme?
-
Hallo!
Ich frage mich gerade, ob es problemlos ist, wenn man einen QThread hat, in dem man z.B. ein QWidget erzeugt? Man hat quasi den main-Thread mit dem Hauptfenster und einen QThread, der eigene Fenster (GUI) erzeugt.
Kann das irgendwelche Probleme machen?

-
Kurze Antwort: Das geht nicht.
-
arghonaut schrieb:
Kurze Antwort: Das geht nicht.
Komisch. Ich kann das aber tun. Das Widget wird normal geöffnet und die Methode, die das macht, stammt auf dem QThread.

-
Habe es gerade noch einmal überprüft. Der Konstruktor meines Widget liefert dieselbe Thread-ID, wie die ID meines QThread. Es ist eine andere, als die ID des Hauptfensters, welches in main() erzeugt wurde.
-
Es ist wurscht ob es bei dir grad funktioniert oder nicht, das Verhalten ist undefiniert. Das darunter liegende Windowingsystem ist einfach nicht Threadsafe.
-
arghonaut schrieb:
Es ist wurscht ob es bei dir grad funktioniert oder nicht, das Verhalten ist undefiniert. Das darunter liegende Windowingsystem ist einfach nicht Threadsafe.
Ok, das heißt das Verhalten ist dann undefiniert.
-
Spock143 schrieb:
arghonaut schrieb:
Es ist wurscht ob es bei dir grad funktioniert oder nicht, das Verhalten ist undefiniert. Das darunter liegende Windowingsystem ist einfach nicht Threadsafe.
Ok, das heißt das Verhalten ist dann undefiniert.
Exakt.
Da das geklärt ist: Warum willst du gerade das Widget in einen anderen Thread auslagern? Dauert dir das Zeichnen zu lange? Erklär mal etwas genauer, dann kann man da auch eine Lösung finden

-
Ach, das ist nicht so wichtig.
Ich frage mich derzeit nur, was passiert mit einem Objekt das im Hauptthread erzeugt wird und dann mit moveToThread() in einen eigenen Thread verschoben wird, wo die Methode process() läuft.
Der Hauptthread hat ja einen Zeiger auf das Objekt. Wenn nun der Thread endet, endet ja noch nicht das eigentliche Objekt.
Was würde passieren, wenn ich delete auf dem Objekt aufrufen würde, während der Thread ausgeführt wird?