Messaggio deadlock

Un thread che chiama la funzione SendMessage per inviare un messaggio a un altro thread non può continuare l'esecuzione fino a quando la routine della finestra che riceve il messaggio restituito. Se il thread ricevente restituisce il controllo durante l'elaborazione del messaggio, il thread di invio non può continuare a eseguire, perché esso è in attesa di SendMessage tornare. Se il ricevente thread quindi invia un messaggio al thread chiamante mentre si è bloccato, può provocare una situazione di stallo che si verifichi.

Si noti che il thread ricevente non deve cedere controllo esplicitamente; chiamando uno qualsiasi dei seguenti funzioni può causare un thread di cedere il controllo in modo implicito.

DialogBox
DialogBoxIndirect
DialogBoxIndirectParam
DialogBoxParam
GetMessage
MessageBox
PeekMessage

Per evitare potenziali deadlock, è consigliabile utilizzare le funzioni SendNotifyMessage o SendMessageTimeout . In caso contrario, una routine della finestra possibile determinare se è stata inviare un messaggio che ha ricevuto da un altro thread chiamando la funzione InSendMessage . Prima di chiamare qualsiasi delle funzioni nell'elenco precedente, durante l'elaborazione di un messaggio, la routine della finestra deve innanzitutto chiamare InSendMessage. Se questa funzione restituisce TRUE, la routine della finestra deve chiamare la funzione di ReplyMessage prima di qualsiasi funzione che fa sì che il thread a cedere il controllo.

Rimedio: Inserire il CD-ROM CD di MSDN Library.

Index