Windows线程消息队列

每一个线程都对应有一个消息队列。

消息分为两类:
1.窗口消息(window message)
2.线程消息即非窗口消息(thread message)

在线程中常采用如下的方式来获取消息及维持线程的运行:

MSG msg;
while (::GetMessage(&msg, NULL, 0, 0))
{
    ::TranslateMessage(&msg);
    ::DispatchMessage(&msg);
}

::GetMessage(&msg, NULL, 0, 0)保证获取所有的窗口消息及线程消息,
::DispatchMessage(&msg)用于将窗口消息发送给对应的窗口过程函数处理,
对应获取得到的线程消息,DispatchMessage是不做任何处理的,
所以,对于线程消息,应这样写代码

while (::GetMessage(&msg, NULL, 0, 0))
{
    if (msg.hwnd == NULL)
    {
        // 处理线程消息
        ...

        continue;
    }
    ::TranslateMessage(&msg);
    ::DispatchMessage(&msg);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值