发送消息给线程

采用PostThreadMessage即可
BOOL PostThreadMessage(
  DWORD  idThread,     //线程ID,通过创建线程后的id
  UINT   Msg,           //消息id
  WPARAM  wParam,    
  LPARAM  lParam);
然后在线程通过GetMessage or PeekMessage去获取该消息.

代码片段如下:
unsigned int CALLBACK thread_func(LPVOID lp)
{
while(1)
{
MSG msg;
while (GetMessage(&msg, NULL,  0, 0)) 
//while (PeekMessage(&msg, NULL,  0, 0,PM_REMOVE)) 
switch(msg.message) 
case WM_MYMESSAGE:
printf("\n *thread_func1:%d", msg.wParam);
break;
}
        } 
}
其中发送线程片段如下:
UINT dwId
_beginthreadex(NULL, 0, thread_func, NULL, 0, &dwId);
        ...
附:
GetMessage(LPMSG lpMsg,  HWND hWnd,   UINT wMsgFilterMin,   UINT wMsgFilterMax)
PeekMessage(LPMSG lpMsg,  HWND hWnd,   UINT wMsgFilterMin,   UINT wMsgFilterMax,UINT wRemoveMsg)
    参数wRemoveMsg的作用是指定消息获取的方式,如果设为PM_NOREMOVE,那么消息将不会从消息队列中被移出,如果设为PM_REMOVE,那么消息将会从消息队列中被移出;
    两个函数主要有以下两个区别: 
    1.GetMessage将等到有合适的消息时才返回,而PeekMessage只是撇一下消息队列。(GetMessage 处于挂起等待消息来,而PeekMessage则不管有不有消息都返回)
    2.GetMessage会将消息从队列中删除,而PeekMessage可以设置最后一个参数wRemoveMsg来决定是否将消息保留在队列中。(如果保留在队列中,最好立即处理)
      在Windows的内部,GetMessage和PeekMessage执行着相同的代码。而两者最大的不同之处则体现在没有任何消息返回到应用程序的情况下。在此种情况下,PeekMessage会返回一个空值到应用程序,GetMessage会在此时让应用程序休眠。
(如果在线程中使用,用GetMessage or PeekMessage都无所谓,不需要考虑消息队列的remove,消息队列在各个线程中不过是个拷贝?而已.)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值