或者系统消息队列和程序消息队列在一个队列中??不解?

解决方案 »

  1.   

    The GetMessage function retrieves a message from the calling thread's message queue. The function dispatches incoming sent messages until a posted message is available for retrieval.
      

  2.   

    只要线程有界面对象,比如窗口,系统就会为他分派一个消息队列,称为程序消息队列。
    所用硬件消息都有系统发送到消息队列中。(比如wm_lbuttondown,wm_nclbuttondown,
    wm_keydown...),另外还包括wm_timer和wm_painter。
    其他的消息基本上都是由系统直接发送到窗口过程而不用如消息队列。(这样可以提高系统
    速度)
    getmessage从消息队列中提取消息,并转化成msg结构,然后dispatchmessage,将消息有系统
    发送到窗口处理过程。另外,微软设计线程的一个目标就是,让每个线程都感觉自己是系统中唯一运行的线程。这个
    目标使得系统变得强壮,不会应为一个线程而挂起其他的线程。所以你要理解消息发送到的是
    线程的消息队列,(如果你的程序是单线程的,那么你只有一个队列,如果有多个界面线程
    那么就要维护多个消息队列)它不会去干扰其他线程的消息队列,他们是独立的。
    除非你提供了让他们沟通的机制,比如共享,postmessage,sendmessage.
    关于,postmessage 和sendmessage他们发送消息到窗口所属线程的队列中。
    当然他们也有区别,比如postmessage只是把消息添加到队列,至于目标线程处不处理就不管了,而sendmessege要等待目标线程返回结果,(这段时间他会挂起以等待).
    有很多细节问题,可以参看资料。呵呵~