• 1.摘要
  • 2.函数功能
  • 3.函数原型
  • 4.函数参数
  • 5.函数应用
  • 6.应用实例
  • 7.备注信息
  • 8.参考资料

PostThreadMessage

PostThreadMessage是一个Windows API函数。其功能是将一个消息放入(寄送)到指定线程的消息队列里,不等待线程处理消息就返回。

函数功能

该函数将一个消息放入(寄送)到指定线程的消息队列里,不等待线程处理消息就返回。

函数原型

BOOL PostThreadMessage( DWORD idThread,

UINT Msg,

WPARAM wParam,

LPARAM lParam

);

函数参数

  1. 1.

    idThread:其消息将被寄送的线程的线程标识符。如果线程没有消息队列,此函数将失败。当线程第一次调用一个Win 32 USER或GDI函数时,系统创建线程的消息队列。要得到更多的信息,参见备注。

  2. 2.

    Msg:指定将被寄送的消息的类型。

  3. 3.

    wParam:指定附加的消息特定信息。

  4. 4.

    IParam:指定附加的消息特定信息。

  5. 5.

    返回值:如果函数调用成功,返回非零值。如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。如果idThread不是一个有效的线程标识符或由idThread确定的线程没有消息队列,GetLastError返回ERROR_INVALID_THREAD。

函数应用

函数应用时要注意以下问题:1

1 .PostThreadMessage有时会失败,报1444错误(Invalid thread identifier. )

其实这不一定是线程不存在的原因,也有可能是线程不存在消息队列(message queue)造成的。

事实上,并不是每个thread都有message queue,那如何让thread具有呢?

答案是,至少调用message相关的function一次,比如GetMessage,PeekMessage。

2.如果是post动态分配的memory给另外一个thread,要注意内存的正确释放。

3.PostThreadMessage不能够post WM_COPYDATE之类的同步消息,否则会报错

4.最好不要使用PostThreadMessage post message给一个窗口,使用PostMessage替代。