Wie gebe ich einem Thread einen Pointer auf einen Parent Dialog mit?
-
hi leute,
nachdem ich festgestellt habe das GetParent() in einem Thread nicht funktionier (hat irgnedwas mit gültigekeit von CWnd zu tun), habe ich mir gedacht das ich beim aufruf meines child dialog (diese startet den thread), diesem eben gleich einen zeiger auf den parent dialog mitgebe.leider hab ich keine ahung wie ich das machen soll,
hab jetzt auch schon stunden das forum durchsucht, und leider nichts gefunden das funktioniert hat.(ist schon unglaublich wie lange man sich mit so kleinigkeiten aufhalten kann)
Al
-
Hi,
wie wär es denn, wenn Du den Thread im ParentDlg einbaust und dann im Childfenster über ((CParentDlg*)GetParent())->StarteThread();
den Thread startest?
-
geht leider nicht, da der thread wiederum eine classe des childdialogs verwendet, um veränderungen am childdialog vorzunehmen.
aber es mussdoch möglich sein dem thread einen zeiger auf den parent dialog mitzugeben?!?
-
Im Augenblick fällt es mir schwer, mir vorzustellen, was Du vorhast
Aber ich versuchs trotzdem mal weiter.
Hilft es dir, wenn Du vor den ThreadStart dir die nötigen Daten vom Hauptfenster abholst, in Globale temporäre Variablen des Childfensters kopierst, damit im Thread arbeitest und nach Beendigung des Threads die Daten wieder zurück kopierst?
-
problem ist folgendes,
im Hauptdialog starte ich einen thread der mir daten aus einer hardware auslese.im childdialog, muss ich nun ständig auf die daten zugreifen, eben auch aus einem thread raus.
jetzt kann ich aus einer normalen funktion des child fensters auf die daten des hauptdialog zugreifen, nicht aber aus dem thread des childdialogs, da der thread den zeiger mit getparent() irgendwie nicht krieg.
also hab ich mir gedacht, kein problem ich gebe dem unterdialog einfach explizit den zeiger auf den hauptdialog mit, dann könnte ich ja mit hilfe des zeigers aus dem thread (child), auf die daten des hauptdialog zugreifgen,
ganz schön kompliziert?!?
-
du kannst doch in den thread ein wparam und lparam mitgeben
caste halt deinen pointer in den lparam
und im thread wieder zurückund schon hast du ihn, hab ich auch schonmal gemacht
-
ZUerst sollte man mal klären ob du eine Workerthread oder einen Benutzeroberflächenthread verwendest.
Es gibt z.B. die Klasse CWinThread.
-
ich bin von einem workerthread ausgegangen