在win32平台中,每一个线程都拥有自己的消息队列。
线程的消息来源有3个:
外设 系统 其他线程
线程可以发送消息到属于相同或不同进程的其他线程,发送的方式是Send或Post。
在Win32平台中,一个很重要的概念是窗口并不拥有消息队列,窗口过程处理消息,消息来源于创建该窗口的线程。系统会把线程消息队列中的消息发给当前活动的窗口。
PostMessage
BOOL PostMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
当线程调用这个函数时,系统确定哪一个线程建立了有hwnd参数标识的窗口,然后系统分配一块内存,将这个消息参数存储到这块内存中,并将这块内存链接到响应线程的投递消息队列中。
PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;
PostQuitMessage(int nExitCode)
该函数终止线程调用它的线程,但是,该函数实际上并不链接到一个消息到投递消息队列。
PostThreadMessage
该函数与PostMessage不同的是,该函数只投递消息到线程,而不指明发给线程创建的那一个窗口。
SendMessage
LRESULT SendMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
SendMessage函数可以将消息直接发给一个窗口过程。只有等消息被处理之后,SendMessage才能返回到调用程序