注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

写着玩

Bob

 
 
 

日志

 
 
 
 

开发防假死浏览器的“秘笈”  

2009-11-25 22:15:57|  分类: Win32 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

http://tieba.baidu.com/club/9883056/p/3506998

 

几个要点:

     1.所有网页窗口必须设定为顶级窗口。

     2.为每个网页窗口单独开一个UI线程。

     3.在UI线程的主循环内监控网页窗口消息是否堵塞。

     4.确保不要跨界向被堵塞页面以send方式发送消息。

     如果看到这里你已经知道怎么做了,恭喜你,估计你也在搞浏览器,看来对你会有点儿用。

     如果你还不明白,我就再唠叨几句:

     1.所有网页必须设定为顶级窗口:

         如果你的浏览器主界面和打开的网页存在父子关系,网页很生气,后果会很严重:任何一个网页运行缓慢或占用系统资源过多时都有可能通过WM_MOUSEACTIVATE锁定整个浏览器,让你的浏览器发呆发傻,你的浏览器也就“假死”了。

         IE8和chrome采用了多进程,可以防崩溃但却不能防假死,就是这个原因。

         在将每个网页都设定为顶级窗口后,不要忘了给网页容器窗口设定WS_EX_TOOLWINDOW,否则一打开你的浏览器,系统任务栏就会万朵桃花开了。

         注意不要将浏览器主界面窗口加WS_EX_TOOLWINDOW,除非你想把你的浏览器只放在系统托盘里。

         浏览器主界面与网页间最好设成平铺的排列,这样就不用担心在主界面激活时网页被覆盖,容易处理网页间的切换,但如果处理不好,在客户机配置较低时会导致屏幕闪烁,解决办法也简单,你去看看MFC里面分割条的源代码,改进一下刷屏方式也许能好一点儿。

     2.为每个网页单独开一个UI线程:

         应了东北一个词儿:“必须的!”,否则哪能不假死?

         当然,也可以为每个网页单独开一个进程,这样连崩溃也防了,只是资源占用稍大一点儿。

     3.在UI线程的主循环内监控网页:

         一个小技巧:可以在UI线程的主循环内派发消息语句的前后为接收消息的网页加上锁定和清除标志。

         处理方式要足够的简洁,否则会影响系统运行效率。

         锁定的后续处理要合理,否则就会出现误判假死之类的毛病。

     4.确保不要跨界向被锁定页面以send方式发送消息。

         跨界就是跨进程或跨线程。

         检查代码,主要需检查网页窗口重绘和网页切换的过程。

         在切换网页时,注意不要随便去试图改变被锁定网页窗口的大小或隐藏该窗口。为了明显标识出假死页面,在切换到此网页标签时,隐藏其他网页,并可在被锁网页上覆盖一个半透明窗口,打上“网页已假死”之类的标志,就显得更“智能”了。

     做完了上面全部的功课,你的浏览器就可以防“假死”了,至于防止弹窗锁住浏览器之类的功能也不用特别去处理就可以实现了,功到自然成嘛!

  评论这张
 
阅读(278)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017