将一个消息放入(寄送)到指定线程的消息队列里,不等待线程处理消息就返回。既可以发送消息给工作线程,也可以发送给UI线程。其原型如下:
BOOL PostThreadMessage( DWORD idThread, UINT Msg, WPARAM wParam, LPARAM lParam ); idThread: 其消息将被寄送的线程的线程标识符。如果线程没有消息队列,此函数将失败。 当线程第一次调用一个Win 32 USER或GDI函数时,系统创建线程的消息队列。要得到更多的信息,参见备注。 Msg:指定将被寄送的消息的类型。 wParam:指定附加的消息特定信息。 IParam:指定附加的消息特定信息。 返回值: 如果函数调用成功,返回非零值。 如果函数调用失败,返回值是零。 若想获得更多的错误信息,请调用GetLastError函数。 如果idThread不是一个有效的线程标识符或由idThread确定的线程没有消息队列, GetLastError返回ERROR_INVALID_THREAD_ID。 备注:消息将寄送到的线程必须创建消息队列,否则调用PostThreadMessage会失败。 用下列方法之一来处理这种情况: 1) 调用PostThreadMessage。如果失败,调用Sleep, 再调用PostThreadMessage,反复执行,直到PostThreadMessage成功。 2) 创建一个事件对象,再创建线程。在调用PostThreadMessage之前, 用函数WaitForSingleObject来等待事件被设置为被告知状态。 消息将寄送到的线程调用PeekMessage(&msg,NULL,WM_USER,WM_USER,PM_NOREMOVE) 来强制系统创建消息队列。设置事件,表示线程已准备好接收寄送的消息。 消息将寄送到的线程通过调用GetMesssge或PeekMesssge来取得消息。 返回的MSG结构中的hwnd成员为NULL。转载于:https://www.cnblogs.com/shangdawei/archive/2013/04/14/3020885.html
相关资源:数据结构—成绩单生成器