Dialog im Workerthread mit Zeiger auf Hauptdialog
-
Hi!
Ich möchte gerne einen Dialog mit kleinem AVI im Thread starten, der anzeigt dass gerade eine längere Aktion in der Hauptanwendung läuft.
Dafür muss der Thread allerdings ab und zu nachsehen, ob die Aktion bereits beendet ist. Deshalb übergebe ich dem Thread den this-Zeiger des Hauptdialogs, aber Irgendetwas scheint daran nicht ganz koscher zu sein, denn der Thread-Dialog benimmt sich komisch:
Er reagiert nicht auf Klicks + Tasten aber beendet sich trotzdem (meistens) korrekt.Thread starten:
CWinThread* pThread = AfxBeginThread(thrFunction, this);Meine Thread-Funktion:
UINT CTestDlg::thrFunction(LPVOID pParam) { CAnimateDlg MyDlg; MyDlg.m_pDlg =(CTestDlg*)pParam; MyDlg.DoModal(); return 0; }Und diese Schleife läuft im Dialog:
while (m_pDlg->m_bStartStop == TRUE) { Sleep(10); } this->EndDialog(0);Frage: Wie übergebe ich meinem Dialog im Thread denn nun den this-Zeiger so, dass er auch korrekt auf den Hauptdialog zugreifen kann?
Thx für Eure Tips schonmal!

-
Hm,
ich würds anders machen.
Vom Hauptfenster aus den Dialog nicht-modal starten und zusätzlich
einen Arbeitsthread starten, der deine Aufgaben erledigen soll.Wenn diese Aufgaben im Hauptthread erledigt werden, ist dieser blockiert (was userunfreundlich ist).
Grüße Rapha
ps. das der Dialog sich komisch verhält, liegt daran, dass du mit folgendem Code ja gar keine Nachrichten zu ihm durchlässt:
while (m_pDlg->m_bStartStop == TRUE) { Sleep(10); }
-
Tip: nimm ein Event... wenn ich schleifen mit nem sleep sehe die so lange vor sich hin laufen bis irgend was passiert, frage ich mich immer ob Leute im wirklichen leben dann auch alle 5s das händy aus der tasche nehmen um nachzusehen ob grad jemand anruft..
-
Ein Arbeitsthread ist schonmal gut, aber soweit ich weiss sind doch die ganzen DAO-Klassen nicht thread-save, oder?
Ich mache in der Zeit eine etwas umfangreichere DB-Abfrage mit DAO und möchte das dem User in irgendeiner Weise anzeigen...
-
Solange du nicht aus mehreren threads gleichzeitig darauf zugreifst ist das kein Problem und sonst musst die threads synchronsieren, auch kein unlösbares problem

-
OK, dann werd' ich mal sehen wie ich Eure Tips einbaue...

Danke + Gruss T.