查了一会,始终没找到相关资料,也许是关键字不好确定
最终,一步一步的调试,发现是以下现象造成的
case WM_CANCELMODE:
MessageBoxA(NULL, "WM_CANCELMODE", "test", MB_OK);
assert(false);
break;
case WM_SHOWWINDOW:
MessageBoxA(NULL, "WM_SHOWWINDOW", "test", MB_OK);
assert(false);
break;
内部机制不懂,但是 assert 使消息队列多了个WM_CANCELMODE, WM_CANCELMODE的处理里面再assert,结果就陷入消息死循环,马上程序就自己退出了.
以后一定注意在处理消息的时候不要调用能抛出同类消息的函数,这样会导致消息死循环.
本文通过实例探讨了在处理WM_CANCELMODE和WM_SHOWWINDOW消息时,由于不当使用assert导致的消息循环死锁问题。作者指出,在消息处理过程中调用可能抛出同类消息的函数会导致消息队列进入无限循环,并分享了具体的解决方法。

804

被折叠的 条评论
为什么被折叠?



