PostThreadMessage功能将消息放置在指定线程的消息队列中,然后返回,而不等待线程处理消息。
BOOL PostThreadMessage(
DWORD 【idThread】, | //线程标识符 |
UINT 【消息】, | //要发帖 |
WPARAM 【wParam中】, | //第一个消息参数 |
LPARAM 【lParam的】 | //第二个消息参数 |
); |
参数
【idThread】
标识消息将被发布到的线程。
如果指定的线程没有消息队列,该函数将失败。当线程首次调用Win32 USER或GDI函数之一时,系统会创建线程的消息队列。有关详细信息,请参阅备注部分。
【消息】
指定要发布的消息的类型。
【wParam中】
指定附加的消息特定信息。
【lParam的】
指定附加的消息特定信息。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.GetLastError如果【idThread】不是有效的线程标识符,或【idThread】指定的线程没有消息队列,则返回ERROR_INVALID_THREAD_ID。
备注
发送消息的线程必须已创建消息队列,否则调用PostThreadMessage将失败。使用以下方法之一来处理这种情况:
*致电PostThreadMessage.如果失败,请调用睡觉,再次致电PostThreadMessage.重复,直到PostThreadMessage成功。
*创建一个事件对象,然后创建线程。在调用PostThreadMessage之前,使用WaitForSingleObject功能等待事件设置为信号状态。在发送消息的线程中,调用PeekMessage(& msg,NULL,WM_USER,WM_USER,PM_NOREMOVE)强制系统创建消息队列。设置事件,以指示线程准备好接收已发送的消息。
发送消息的线程通过调用GetMessage或PeekMessage功能检索消息。返回的MSG结构的HWND成员为NULL。
也可以看看
GetCurrentThreadId, GetMessage, GetWindowThreadProcessId, MSG, PeekMessage, PostMessage, 睡觉, WaitForSingleObject