天狼鼠

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在win32平台中,每一个线程都拥有自己的消息队列。

线程的消息来源有3个:

外设    系统    其他线程

线程可以发送消息到属于相同或不同进程的其他线程,发送的方式是Send或Post。

在Win32平台中,一个很重要的概念是窗口并不拥有消息队列,窗口过程处理消息,消息来源于创建该窗口的线程。系统会把线程消息队列中的消息发给当前活动的窗口。

PostMessage

BOOL PostMessage(
  HWND hWnd,      // handle of destination window
  UINT Msg,       // message to post
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);
当线程调用这个函数时,系统确定哪一个线程建立了有hwnd参数标识的窗口,然后系统分配一块内存,将这个消息参数存储到这块内存中,并将这块内存链接到响应线程的投递消息队列中。

PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;

PostQuitMessage(int nExitCode)

该函数终止线程调用它的线程,但是,该函数实际上并不链接到一个消息到投递消息队列。

PostThreadMessage

该函数与PostMessage不同的是,该函数只投递消息到线程,而不指明发给线程创建的那一个窗口。

SendMessage

LRESULT SendMessage(
  HWND hWnd,      // handle of destination window
  UINT Msg,       // message to send
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

SendMessage函数可以将消息直接发给一个窗口过程。只有等消息被处理之后,SendMessage才能返回到调用程序

posted on 2011-03-20 15:01  情有独钟  阅读(382)  评论(0编辑  收藏  举报