参考:wine 8.14
-
windows 介绍
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-postthreadmessagew
此函数的作用是将message post到指定线程的message queue.
-
源码分析
BooL WINAPI NtUserPostThreadMessage(DWORD thread, UINT msg, WPARAM wparam, LPARAM lparam)
{
struct send_message_info info;
if(is_pointer_message(msg, wparam))
{
....
}
if(is_exiting_thread(thread)) return TRUE;
info.type = MSG_POSTED;
info.dest_tid = thread;
......
return put_message_in_queue(&info, NULL);
}
首先还是判断message 是否是能够放入message queue的。接下来判断线程是否正在退出,最后将消息放入线程消息队列。此函数是直接指定了具体的线程id.此函数与NtUserPostMessage的区别是,后者传入的参数是HWND,HWND 有特殊用法,需要对其进行区分。当后者的HWND结构值为NULL,其行为与当NtUserPostThreadMessage的dwThreadID参数是当前线程id时的行为一致。