wxThread mit GUI-Aufrufen
-
Hi,
Bislang hatte ich immer eine Klasse die ich wxObject abgeleitet habe und die dann einen Thread erzeugt hat.
Wenn ich folgendes Szenario habe:
class CurrentWorker: public wxThread { CurrentWorker( wxEvtHandler* pView ); Init(); DoSomeGUIOutput(); virtual ExitCode Entry(); ... };
Wenn ich also DoSomeGUIOutput vor dem Aufruf von Create() oder Run() ist das doch sicher, weil ich doch nur eine Klasse erzeuge. Die ist zwar von wxThread abgeleitet aber doch kein Thread. Der Thread wird doch erst durch Create() erzeugt bzw. dann durch Run() die Ausführung gestartet. Erst in der Entry-Funktion ist der GUI-Audruf unsicher oder stimmt das nicht?
-
Ja, wenn du die Funktion aus deinem Hauptthread aufrufst, ist sie sicher. Du kannst sie auch aufrufen, wenn der Thread läuft, nur halt nicht aus dem Thread heraus. Stellt sich nur die Frage, wozu du so etwas brauchst.
-
Nun ja, wenn der Thread Daten erzeugt, die auf der Obberfläche dargestellt werden sollen.... Dann würde ich die Initialisierung im Haupthread machen, dann den Thread starten sobald Daten vorhanden sind, diese kopieren ( in einen anderen Buffer, zwei Thread's ->lesen + schreiben ) und per Event den GUI-Thread informieren, das Daten vorhanden sind und angezeigt werden können. Dann Thread per Event informieren, das er jetzt wieder Daten schicken kann usw. Der Thread nutzt also wirklich nur die Funktionen, die wiederholt ausgeführt werden müssen. Initialisierungen aber werden nur einal benötigt. Das muss der Thread nicht machen.