讯息死锁

【勇芳软件工作室】汉化HomePreviousNext

调用SendMessage函数将消息发送到另一个线程的线程无法继续执行,直到接收消息的窗口过程返回。如果接收线程在处理消息时产生控制,则发送线程无法继续执行,因为它等待SendMessage返回。这种情况称为【僵局】.接收线程不需要明确地产生控制;调用以下任何函数可以导致线程产生控制。

DialogBox
DialogBoxIndirect
DialogBoxIndirectParam
DialogBoxParam
GetMessage
MessageBox
PeekMessage

窗口过程可以通过调用InSendMessage函数来确定其接收的消息是否被另一个线程发送。在处理消息之前调用前面列表中的任何功能之前,窗口过程应该首先调用InSendMessage.如果此函数返回TRUE,则窗口过程必须在导致线程产生控制的任何函数之前调用ReplyMessage函数。