thread anhalten, bis anderer thread fertig....
-
hi, ich rufe aus einem dialog einen thread auf, der eine modale dialogbox anzeigt.
Nun möchte ich den thread des AUFRUFENDEN Dialogs solange anhalten, bis der Thread mit der modalen dialogbox beendet ist.
Kann mir bitte jemand einen Tip geben.PS: ich muss die dialogbox in einem eigenen thread ausgeben - das hat schon seinen grund.
-
nach dem starten des zweiten threads ruft der erste einfach 'WaitForSingleObject (handle_des_neuen_threads, INFINITE)' auf. wenn der zweite thread beendet wird, macht der erste dann weiter.
btw: für unabhängige dialogboxen in 2 threads brauchst du auch 2 message queues (das ist nicht einfach), sonst kannst du die zweite box nicht bedienen, wenn du die erste anhälst.
-
joe84 schrieb:
hi, ich rufe aus einem dialog einen thread auf, der eine modale dialogbox anzeigt.
Nun möchte ich den thread des AUFRUFENDEN Dialogs solange anhalten, bis der Thread mit der modalen dialogbox beendet ist.
Kann mir bitte jemand einen Tip geben.PS: ich muss die dialogbox in einem eigenen thread ausgeben - das hat schon seinen grund.
Hallo,
dazu habe ich eine Frage: läuft der aufrufende Dialog ebenfalls in einem eigenen Thread oder ist der MainThread dafür zuständig?
Ich wurschtel auch gerade mit Threads in Dialogfenstern rum und habe da ähnliche Probleme. In einem Buch haben die mal vorgeschlagen, ein CEvent-Ereignis im Thread zu definieren. Das kann man dan mit den Methoden SetEvent und ResetEvent dafür benutzen, um zu Überprüfen, ob der Thread läuft oder nicht. Habe allerdings noch nicht so viel Erfahrung damit, möglicherweise hilft Dir das gar nicht weiter....
-
also, ich starte den thread mit einem event
und sofort danach habe ich ein waitforsingleobject mit infinte aufgerufen.
ich habe reindebuggt und ich komme auch zum domodal im thread, allerdings wird der dialog nicht angezeigt.
nehme ich das waitforsingleobject raus - wird zwar der dialog angezeigt , aber der aufrufende dialog wartet nun nicht auf mich....
ich steh voll auf dem schlauch........
CAufrufenderDialog::CAufrufenderDialog() { AfxBeginThread(MyDialogThread,NULL,THREAD_PRIORITY_BELOW_NORMAL); } // startet nun den thread und soll warten, bis dieser fertig ist int CAufrufenderDialog::StartThread() { m_gEventStartMyDialogThread.SetEvent(); WaitForSingleObject(m_gEventEnd,INFINITE); return m_gnResult; } // thread - static member UINT CAufrufenderDialog::MyDialogThread(LPVOID WinObjPtr) { WaitForSingleObject(m_gEventStartMyDialogThread,INFINITE); CSubDialog dlg(m_gpParent); m_gnResult = dlg.DoModal(); m_gEventEnd.SetEvent(); return 0; }
-
so......... nun hab ichs endlich gebacken bekommen.
falls es jemand interessiert:
Das stimmt so nicht:
// startet nun den thread und soll warten, bis dieser fertig ist int CAufrufenderDialog::StartThread() { m_gEventStartMyDialogThread.SetEvent(); WaitForSingleObject(m_gEventEnd,INFINITE); return m_gnResult; }sondern so:
// startet nun den thread und soll warten, bis dieser fertig ist
int CAufrufenderDialog::StartThread()
{
m_gEventStartMyDialogThread.SetEvent();MSG msg;
while(1)
{
if(!WaitForSingleObject(m_gEventEnd,10))
break;
if(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return m_gnResult;
}
-
genauso oder ählich hatte ich das auch gemeint, hatte mich nur nich so richtig ausgedrückt; damit kann man ja auch breitschlagen, dass man verhindert, das mehrere Threads laufen wenn dies nicht gewollt ist....