Message Deadlocks

Ein Thread, der die SendMessage -Funktion zum Senden einer Nachricht an einen anderen Thread Ruft weiter nicht ausgeführt, bis die Fensterprozedur, die die Nachricht empfängt zurückgibt. Der empfangende Thread ergibt die Kontrolle beim Verarbeiten der Nachricht, weiter nicht der sendende Thread ausgeführt werden, denn es auf SendMessage wartet zurückgegeben. Wenn der empfangende Thread dann eine Meldung an den aufrufenden Thread, sendet während es gesperrt ist, kann dies einen Deadlock auftreten führen.

Beachten Sie, dass der empfangende Thread Steuerelement explizit nicht nachgeben muss; durch Aufrufen einer der folgenden Funktionen verursachen einen Thread zum Steuerelement implizit Ausbeute.

DialogBox
DialogBoxIndirect
DialogBoxIndirectParam
DialogBoxParam
GetMessage
MessageBox
PeekMessage

Um potenzielle Deadlocks zu vermeiden, sollten Sie die SendNotifyMessage oder SendMessageTimeout -Funktion. Andernfalls kann eine Fensterprozedur bestimmen, ob eine Nachricht, die sie erhalten hat, von einem anderen Thread gesendet wurde, durch Aufrufen der Funktion InSendMessage . Vor dem Aufruf der Funktionen in der vorhergehenden Liste beim Verarbeiten einer Nachricht, sollte die Fensterprozedur zunächst rufen Sie InSendMessage. Diese Funktion TRUE zurück, muss die Fensterprozedur die ReplyMessage Funktion vor eine beliebige Funktion aufrufen, die der Thread Kontrolle ergeben.

Index