PostThreadMessage是一个Windows API函数。其功能是将一个队列消息放入(寄送)到指定线程的消息队列里,不等待线程处理消息就返回,可以实现线程间消息传递。
函数原型:
BOOL PostThreadMessage(
DWORD idThread,
UINT Msg,
WPARAM wParam,
LPARAM IParam
);
输入参数:
idThread,消息将被寄送的线程的线程标识符。
Msg,指定将被寄送的消息类型。
wParam,指定附加的消息特定信息。
IParam,指定附加的消息特定信息。
返回值:
如果函数调用成功,返回非零值。
如果函数调用失败,返回值是零。
若想获得更多的错误信息,请调用GetLastError函数。
如果idThread不是一个有效的线程标识符或由idThread确定的线程没有消息队列,GetLastError返回ERROR_INVALID_THREAD_ID。
说明:
消息将寄送到的线程必须已创建消息队列,否则调用PostThreadMessage会失败。用下列方法之一来处理这种情况:
(1)调用PostThreadMessage。如果失败,调用Sleep,再调用PostThreadMessage,反复执行,直到PostThreadMessage成功。
(2)创建一个Event事件对象,让PostThreadMessage等待接受的线程idThread创建一个消息队列。可以通过调用PeekMessage强制系统创建一个消息队列。