今天这个BUG再次证明了,凡事有果必有因
来源:互联网 发布:beyonce 知乎 编辑:程序博客网 时间:2024/05/01 05:05
我们的程序用到Flash控件进行互操作以提供更友好的界面。
为了屏蔽右键菜单,直接子类化了Flash窗口,用自己的窗口函数,在右键时不发送给Flash控件,自己处理。
测试中发现,一些情况下(主要是点击后开IE),关闭窗口销毁控件会导致崩溃。
1. 发现在ShellExecute这个API中会有消息循环,导致WM_CLOSE会在ShellExecute返回之前被处理
2. 改成异步ShellExecute后,发现还是会有问题,而且总是在WM_TIMER(0x0113)这个消息上。
3. Flash控件会不断生成WM_TIMER,并在其处理过程中会调用timeGetTime来进行计时。这会导致对ShellExecuteExW的间接调用,结果,是在CallWndProc返回前,窗口又被销毁了。
解决办法:
对窗口函数的调用前后进行嵌套计数。
父窗口在OnClose时,判断如果嵌套计数>0就不进行DestroyWindow,只是设置一个准备关闭的标志。
嵌套计数==0时,发出一个事件。父窗口收到事件后,判断准备关闭标志置上的情况下,进行DestroyWindow。
详细调试过程后面有空整理一下发表。
- 今天这个BUG再次证明了,凡事有果必有因
- 今天开通了这个BLOG!!
- 今天申请了这个帐号
- 今天开通了这个空间
- 今天开放了这个居然
- 今天中9又再次升级了
- 今天再次认真整理了浏览器收藏夹
- 嵌入式stm32--编程所遇(各类错误 )--凡事靠自己,找bug,别人能帮到太少了~~~
- 今天这个blog终于恢复正常了!!!
- 今天我加入CSDN这个大家庭了
- 今天我申请了这个账号
- 今天刚进了这个网站
- 好长时间不见这个了,今天试试
- 今天开通这个了,试一下
- 今天看到这个笑喷了。。。。
- 今天刚刚开通了这个博客。。。
- 如果达到这七条,证明你已经爱上这个人了
- IE这个bug真是弱爆了
- 佛教学说
- C++文件流:
- 继承与包含中构造与析构的执行顺序
- Java编程那些事儿96——多线程使用示例1
- From China Daily 22/5
- 今天这个BUG再次证明了,凡事有果必有因
- 如何学习asp.net?.net精英成长必看书籍
- Actionscript Animation简明教程
- pku3414 POTS(哦也。。。。。。。。又输了。。这是第几次无耻发别人代码AC了。。。。。。我垃圾我笨我傻我真TMD不是东西!!!!
- 25个最佳程序员漫画
- MYSQL 中关于时间戳在C#中的实现
- oracle入门
- exchange server2003与chkdsk
- [WinDBG 技巧] 列举所有Handle(句柄)以及查看Handle 信息