PostThreadMessage 和 postMessage 区别

作者在 2008-09-21 00:14:14 发布以下内容
CWnd::PostMessage  
   
  BOOL   PostMessage(   UINT   message,   WPARAM   wParam = 0, LPARAM   lParam = 0 );  
  返回值如果公布了消息,则返回非零值;否则返回0。  
   
  参数message指定了要公布的消息。  
  wParam指定了附加的消息信息。这个参数的内容依赖于要公布的消息。  
  lParam指定了附加的消息信息。这个参数的内容依赖于要公布的消息。  
  说明这个函数将一个消息放入窗口的消息队列,然后直接返回,并不等待对应的窗口处理消息。消息队列中的消息是通过调用Windows的 GetMessage或PeekMessage函数来获得的。可以通过Windows的PostMessage函数来访问其它应用程序。 

  CWinThread::PostThreadMessage 
  BOOL   PostThreadMessage( UINT message,WPARAM wParam,LPARAMlParam );返回值如果成功,则返回非零值;否则返回0。  
  参数message用户自定义消息的ID。wParam第一个消息参数。  
  lParam第二个消息参数。说明调用这个函数以向其它CWinThread对象发送一个用户自定义消息。发送的消息通过消息映射宏ON_THREAD_MESSAGE被映射到适当的消息处理函数。

显然它们发送到的对象不同:PostMessage发消息给窗口,PostThreadMessage发消息给线程。

他们都是向线程的消息队列放一个消息就立即返回;  
  不同的是:  
  BOOL   PostMessage(  
      HWND   hWnd,             //   handle   of   destination   window  
      UINT   Msg,               //   message   to   post  
      WPARAM   wParam,     //   first   message   parameter  
      LPARAM   lParam       //   second   message   parameter  
  );  
  明确表示了要投递的消息是发给哪个窗口(当然了,是在窗口所在线程的消息队列里放上投递的消息)的,而  
  PostThreadMessage表示要放到哪个线程,而如果PostMessage的第一个参数HWND   hWnd 是 NULL时就相当于是以当前线程的id为参数调用了PostThreadMessage方法 ,这也就是“NULL The function behaves like   a   call   to   PostThreadMessage with the dwThreadId   parameter   set   to   the   identifier   of   the   current   thread. ”的意思。也就是 PostMessage 包含 PostThreadMessage的功能
默认分类 | 阅读 12265 次
文章评论,共0条
游客请输入验证码
浏览1932421次