线程与消息循环的关系

在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才能返回到调用程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值