gpt4 book ai didi

c++ - GetMessage 失败会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 20:39:52 25 4
gpt4 key购买 nike

如果 GetMessage(...) 失败,消息是否不会从消息队列中删除?我问是因为当我有以下循环时,我最终会进入一个无限循环,试图一遍又一遍地处理相同的消息:

while( GetMessage( &msg, NULL, WM_SPEVENT, WM_SPUUIEVENT ))
{
//Do something with my message. (Translate + dispatch perhaps, if I wanted)
}

因为我不处理GetMessage失败的情况,循环会不会一直卡在同一条消息上?这就是为什么以下是实现循环的正确方法的原因吗?:

while( (bRet = GetMessage( &msg, NULL, WM_SPEVENT, WM_SPUUIEVENT )) != 0)
{
if (bRet == -1)
{
//
}
else
{
//Do something with my message
}

}

最佳答案

如果 GetMessage 失败并返回 -1,那么通常您的第一个代码块确实会导致无限循环。因此,如果 -1 是一个可能的返回值,这就是您看到第二个代码块形式的 MSDN 示例的原因。

但是,

GetMessage(&msg, NULL, WM_SPEVENT, WM_SPUUIEVENT)

从不失败,因此从不返回 -1GetMessage 的失败模式是 &msg 指的是无效内存,或者第二个参数(窗口句柄)无效。此处两种故障模式都不会发生,当然前提是 msg 已正确定义。通常它是一个局部变量,因此 &msg 总是没问题的。

Raymond Chen 在此处介绍了此内容:When will GetMessage return -1?

关于c++ - GetMessage 失败会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26238565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com