CodeFatal
Erfahrenes Mitglied
Hallo,
ich habe ein nerviges Problem, bei dem ich wieder erwarten in einen Deadlock oder ähnliches verfalle.
Folgende Situation:
- MFC Dialogfeldbasierende App
- CriticalSection zum Locken wird verwendet
Thread 1:
- CS1
- Läuft (auch im Problemfall weiter)
- Hier nur der Vollständigkeit halber genannt
CDialog:
- Zeigt Elemente an
- Reagiert auf Messages
- Bei einem Klick auf einen Button wird ein weiterer Thread gestartet
Thread 2:
Das ganze Spiel funktioniert solange, bis das Lock in der OnWndMsg(...) gerufen wird und Thread 2 schon im Lock ist.
Meine Frage: Warum geht das nicht weiter? Theoretisch sollte doch eigentlich der Thread 2 irgendwann durch sein und dann der Rest in OnWndMsg abgearbeitet werden.
Ich habe bereits eine ähnliche Frage gefunden. Leider hilft die mir nur nicht weiter.
Auch die Anleitung zu CriticalSection sind mir bekannt.
Wo übersehe ich was? Ist OnWndMsg(...) nicht asynchron zu meinem Thread?
Hoffe ihr könnt mir helfen.
Danke
P.S.: Ich rufe die Threads mit:
ich habe ein nerviges Problem, bei dem ich wieder erwarten in einen Deadlock oder ähnliches verfalle.
Folgende Situation:
- MFC Dialogfeldbasierende App
- CriticalSection zum Locken wird verwendet
Thread 1:
- CS1
- Läuft (auch im Problemfall weiter)
- Hier nur der Vollständigkeit halber genannt
Code:
while(1){
Lock();
//mach was
UnLock();
PostMessage(<zum CDialog>);
Sleep(50);}
//Thread wird nie verlassen
CDialog:
- Zeigt Elemente an
- Reagiert auf Messages
Code:
OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult){
if(Message == <Von Thread1>){
Lock();
//Mach was
UnLock();
}}
Thread 2:
Code:
while(1){//Nur zu Testzwecken um Deadlock zu finden
Lock();
//mach was
UnLock();
Sleep(2000);//nur zu Testzwecken um Deadlock zu finden}
return;
Das ganze Spiel funktioniert solange, bis das Lock in der OnWndMsg(...) gerufen wird und Thread 2 schon im Lock ist.
Meine Frage: Warum geht das nicht weiter? Theoretisch sollte doch eigentlich der Thread 2 irgendwann durch sein und dann der Rest in OnWndMsg abgearbeitet werden.
Ich habe bereits eine ähnliche Frage gefunden. Leider hilft die mir nur nicht weiter.
Auch die Anleitung zu CriticalSection sind mir bekannt.
Wo übersehe ich was? Ist OnWndMsg(...) nicht asynchron zu meinem Thread?
Hoffe ihr könnt mir helfen.
Danke
P.S.: Ich rufe die Threads mit:
Code:
AfxBeginThread(...);
UINT myThread(LPVOID pParam){...}