首先,发送的消息要追加到接收线程的发送消息队列,同时还为这个线程设定 Q S _ S E N D M E S S A G E标志(后面将讨论)。其次,如果接收线程已经在执行代码并且没有等待 消息(如调用G e t M e s s a g e、P e e k M e s s a g e或Wa i t M e s s a g e),发送的消息不会被处理,系统不能 中断线程来立即处理消息。当接收进程在等待消息时,系统首先检查Q S _ S E N D M E S S A G E唤醒 标志是否被设定,如果是,系统扫描发送消息队列中消息的列表,并找到第一个发送的消息。 有可能在这个队列中有几个发送的消息。例如,几个线程可以同时向一个窗口分别发送消息。 当发生这样的事时,系统只是将这些消息追加到接收线程的发送消息队列中。 当接收线程等待消息时,系统从发送消息队列中取出第一个消息并调用适当的窗口过程来 处理消息。如果在发送消息队列中再没有消息了,则Q S _ S E N D M E S S A G E唤醒标志被关闭。当 接收线程处理消息的时候,调用S e n d M e s s a g e的线程被设置成空闲状态( i d l e),等待一个消息 出现在它的应答消息队列中。在发送的消息处理之后,窗口过程的返回值被登记到发送线程的 应答消息队列中。发送线程现在被唤醒,取出包含在应答消息队列中的返回值。这个返回值就 是调用S e n d M e s s a g e的返回值。这时,发送线程继续正常执行。 当一个线程等待S e n d M e s s a g e返回时,它基本上是处于空闲状态。但它可以执行一个任务: 如果系统中另外一个线程向一个窗口发送消息,这个窗口是由这个等待S e n d M e s s a g e返回的线程所建立的,则系统要立即处理发送的消息。在这种情况下,系统不必等待线程去调用 G e t M e s s a g e、Peek Message或Wa i t M e s s a g e。建议读读 "WINDOWS核心编程" 一书,网上应该有下载的
Q S _ S E N D M E S S A G E标志(后面将讨论)。其次,如果接收线程已经在执行代码并且没有等待
消息(如调用G e t M e s s a g e、P e e k M e s s a g e或Wa i t M e s s a g e),发送的消息不会被处理,系统不能
中断线程来立即处理消息。当接收进程在等待消息时,系统首先检查Q S _ S E N D M E S S A G E唤醒
标志是否被设定,如果是,系统扫描发送消息队列中消息的列表,并找到第一个发送的消息。
有可能在这个队列中有几个发送的消息。例如,几个线程可以同时向一个窗口分别发送消息。
当发生这样的事时,系统只是将这些消息追加到接收线程的发送消息队列中。
当接收线程等待消息时,系统从发送消息队列中取出第一个消息并调用适当的窗口过程来
处理消息。如果在发送消息队列中再没有消息了,则Q S _ S E N D M E S S A G E唤醒标志被关闭。当
接收线程处理消息的时候,调用S e n d M e s s a g e的线程被设置成空闲状态( i d l e),等待一个消息
出现在它的应答消息队列中。在发送的消息处理之后,窗口过程的返回值被登记到发送线程的
应答消息队列中。发送线程现在被唤醒,取出包含在应答消息队列中的返回值。这个返回值就
是调用S e n d M e s s a g e的返回值。这时,发送线程继续正常执行。
当一个线程等待S e n d M e s s a g e返回时,它基本上是处于空闲状态。但它可以执行一个任务:
如果系统中另外一个线程向一个窗口发送消息,这个窗口是由这个等待S e n d M e s s a g e返回的线程所建立的,则系统要立即处理发送的消息。在这种情况下,系统不必等待线程去调用
G e t M e s s a g e、Peek Message或Wa i t M e s s a g e。建议读读 "WINDOWS核心编程" 一书,网上应该有下载的