[發明專利]一種窗口防假死方法和裝置有效
| 申請號: | 201110452300.X | 申請日: | 2011-12-29 |
| 公開(公告)號: | CN102591711A | 公開(公告)日: | 2012-07-18 |
| 發明(設計)人: | 李寶生;陳志;孫鵬 | 申請(專利權)人: | 奇智軟件(北京)有限公司 |
| 主分類號: | G06F9/46 | 分類號: | G06F9/46 |
| 代理公司: | 北京潤澤恒知識產權代理有限公司 11319 | 代理人: | 蘇培華 |
| 地址: | 100016 北京市朝陽*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 窗口 假死 方法 裝置 | ||
技術領域
本申請涉及計算機技術領域,特別是涉及一種窗口防假死方法和裝置。
背景技術
Windows客戶端軟件是基于窗口結構設計的。窗口之間有父子關系、兄弟關系等,windows操作系統會根據這些關系來管理窗口的顯示、焦點、窗口大小等,這大大減輕了windows開發人員的工作。例如:如果隱藏父窗口,那么所有父窗口的子窗口也會一起隱藏,并且失去焦點,這些都是操作系統幫助實現的。
這種設計也會有一些副作用,最嚴重的問題之一就是子窗口卡住后,會導致父窗口也會卡住。例如:子窗口在某個消息處理中發生假死、死循環等,此時再去操作父窗口,如改變父窗口大小、顯示、隱藏父窗口、設置父窗口屬性等,父窗口也會假死,導致整個窗口系統假死,那么如果想要打開新的窗口,只能重啟窗口,給用戶帶來極大不便。其中,所述假死是窗口系統的的一種出問題的狀態,表現為界面不刷新,點擊任何按鈕沒有響應,無法進行任何一種操作的狀態。
比如,在多標簽瀏覽器中,瀏覽器框架父窗口和瀏覽器子窗口,都是在同一個線程中的,當瀏覽器子窗口出現問題后,會直接導致整個父窗口假死、甚至崩潰,即導致整個瀏覽器處于假死狀態。
現有技術中,通過將父窗口、子窗口放在不同的進程或者線程,該方法可以部分解決子窗口假死,框架父窗口也假死的問題。當子窗口假死后,其所在的線程不能處理任何消息,此時框架父窗口所在的線程如果不向該子窗口發送同步消息,則父窗口仍然可以相應用戶的操作。對于該方案來說,由于windows操作系統對于具有父子關系、兄弟關系的窗口會做很多邏輯處理,例如,隱藏父窗口時,會隱藏所有該父窗口的子窗口等,那么一旦某個子窗口假死,如果隱藏父窗口,那么父窗口還會向假死的子窗口發送同步消息,那么由于子窗口假死,父窗口也會接著假死,從而導致整個窗口系統假死,即使整個窗口系統處于假死狀態。比如,若瀏覽器當前標簽的子窗口假死后,隱藏瀏覽器框架父窗口時,就會向假死的子窗口發送同步消息,從而導致整個瀏覽器假死。
發明內容
本申請所要解決的技術問題是提供一種窗口防假死方法和裝置,在Windows系統中從根本上解決了窗口系統的子窗口假死從而導致整個窗口系統假死的問題。
為了解決上述問題,本申請公開了一種窗口防假死方法,包括:
在通過一線程創建子窗口時,先在與窗口系統各子窗口所在線程不同的線程中創建中間窗口;框架父窗口所述中間窗口為當前創建子窗口的父窗口,所述中間窗口的父窗口為框架父窗口;所述當前創建的子窗口所在線程與框架父窗口所在線程不同;
檢測各子窗口是否假死,如果一子窗口假死,則將假死子窗口的假死消息發送給相應中間窗口所在的線程;
通過所述中間窗口所在線程將中間窗口和所述假死子窗口從窗口框架中分離。
優選的,所述的分離包括:
分離中間窗口與框架父窗口的父子關系,和中間窗口對應的子窗口的線程輸入消息循環與中間窗口對應的框架父窗口的線程輸入消息循環的連接關系。
優選的,通過以下步驟進行分離:
將所述子窗口的線程輸入消息循環從框架父窗口的線程輸入消息循環剝離;
將所述子窗口對應的中間窗口的父窗口設置為空;
將所述子窗口對應的中間窗口本身設置為不是孩子窗口的屬性。
優選的,通過以下步驟檢測各子窗口是否假死:
在框架父窗口啟動后,啟動假死窗口檢測線程;
當所述子窗口創建時,將所述子窗口的窗口句柄存入假死窗口檢測線程的隊列中;
檢測各子窗口的窗口句柄對應的時間戳,所述窗口句柄對應的時間戳由相應子窗口所在線程更新;如果一窗口句柄對應的時間戳未更新時間段超過閾值,則確認相應子窗口假死。
優選的,在將中間窗口和所述子窗口從窗口框架中分離后還包括:
當所述子窗口恢復正常后,恢復所述中間窗口與所述子窗口的父子關系,和恢復所述框架父窗口與所述中間窗口的父子關系。
優選的,通過以下步驟恢復所述中間窗口與所述子窗口的父子關系,并恢復所述框架父窗口與所述中間窗口的父子關系:
將所述子窗口的線程輸入消息循環和框架父窗口的線程輸入消息循環連接;
將所述子窗口對應的中間窗口的屬性設置為具有孩子窗口屬性;
將假死子窗口對應的中間窗口的父窗口設置為框架父窗口。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于奇智軟件(北京)有限公司,未經奇智軟件(北京)有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201110452300.X/2.html,轉載請聲明來源鉆瓜專利網。





