Threads für Beutzeroberflächen
-
Hi..
Ich bin mich gerade mit Benutzoberflächenthreads am rumschlagen, wie man so schön sagt...Ich habe eine Klasse von CWinThread abgeleitet, was eigentlich auch hingehauen hat. Ich will in jeweils einem Thread ein Dialogfeld laufen lassen. Jetzt habe ich folgendes Problem: Wenn ich ein Dialogfeld instanziere und das in der InitInstance Methode des Threads platziere, dann klappt alles wunderbar...Nur wenn ich ein zweites Dialogfeld instanzieren will, dann knallts...Ich kriege einen Assert: Wincore.cpp / Line 628...
Was mache ich da falsch? Ich habe dies leider bis jetzt noch nie gemacht...//RUNTIME_CLASS CRuntimeClass* prt = RUNTIME_CLASS(CDlgThread); AfxBeginThread(prt,0,0,0,0); //Dann im Thread // ZU ERLEDIGEN: Initialisierungen für [b]jeden[/b] Thread hier durchführen //[b]Wie ist das jeden zu verstehen??[/b] CDlgCTL *DlgP1CTL = new CDlgCTL; DlgP1CTL->Create(IDD_DLGCTL); DlgP1CTL->SetWindowPos(NULL,15,56,240,334,SWP_DRAWFRAME); DlgP1CTL->ShowWindow(SW_SHOW); DlgP1CTL->PostMessage(WM_PAINT); DlgP1CTL->PostMessage(WM_INITDIALOG); return TRUE; //Wenn ich ein zweites Dialogfeld instanzieren will, dann geht's nicht mehr... CDlgCTL *DlgP2CTL = new CDlgCTL; DlgP2CTL->Create(IDD_DLGCTL); DlgP2CTL->SetWindowPos(NULL,255,56,240,334,SWP_DRAWFRAME); DlgP2CTL->ShowWindow(SW_SHOW); DlgP2CTL->PostMessage(WM_PAINT); DlgP2CTL->PostMessage(WM_INITDIALOG); return TRUE;
Grüsse
Danny
-
ich kenne das mit GUI threads irgendwie anders:
BOOL CDialogThread::InitInstance() { m_pMainWnd = dialog; return TRUE; } int CDialogThread::Run() { dialog->DoModal(); return CWinThread::Run(); }
und wenn wiedermal ein ASSERT zuschlägt, liess mal die kommentare die oft unmittelbar davor stehen, das hilft meinstens schon weiter
-
Danke für den Tip...
Ich öffne mit Create nicht modale Dialoge...Das sollte so hinhauen (In der Run Methode)
Was mache ich aber, wenn ich zwei Dialoge in zwei separaten Threads laufen lassen will?
Gruss
Danny