專利名稱:一種增強系統穩定性的方法
技術領域:
本發明涉及一種增強系統穩定性的方法,屬于計算機軟件技術領域。
背景技術:
在計算機技術發展越來越快的今天,用戶對于系統的穩定性要求也越來越高。目 前計算機的主流系統為windows系統,由于在很多情況下系統必須加載某些不可控模塊, 當系統必須使用一個不可控模塊時,在控制上就會存在很多問題,比如此模塊對外只有部 分接口可用,其它卸載和資源釋放接口都未知,因此當系統直接加載使用此模塊時,必然引 起一系列的問題。首先是穩定性不好,再次是資源不能安全釋放,不停的再申請資源,資源 消耗很嚴重。
發明內容
本發明的目的在于提供一種增強系統穩定性的方法,本發明采用多進程內存映射 文件的方式來解決不可控模塊的控制,即在使用不可控模塊時,可把此不可控模塊單獨做 為一個子進程,采用多進程內存映射文件的方式來控制不可控模塊,可以及時的釋放不可 控模塊占用的大量資源。本發明的技術方案為一種增強系統穩定性的方法,其步驟為1)建立一內存映射文件,其包括待處理數據存儲部分、處理完數據存儲部分;2)主進程將需要某不可控模塊處理的數據存放在所述待處理數據存儲部分,同時 判斷該不可控模塊是否運行;如果未運行則啟動該不可控模塊;3)主進程發送一數據處理消息給該不可控模塊;4)該不可控模塊收到所述數據處理消息后,對數據進行處理;5)該不可控模塊將處理后的數據放到所述處理完數據存儲部分;6)主進程循環檢測所述處理完數據存儲部分是否有對應的數據,如果有則讀取該 數據,然后判斷后續是否有需要該不可控模塊處理的數據,如果沒有則發送一退出消息給 該不可控模塊;如果主進程在設定的循環次數內沒有檢測到對應的數據則退出。進一步的,所述內存映射文件還包括一時間存儲部分。進一步的,所述方法中設置一臨時變量,用于保存所述不可控模塊最近一次數據 處理時的時間;所述不可控模塊間隔性的判斷當前時間與所述臨時變量中記錄的時間間隔 是否大于設定閾值B,如果大于則退出,否則把當前時間寫入所述時間存儲部分。進一步的,所述主進程和不可控模塊之間通過自定義消息進行通信,其方法為所 述主進程根據需要處理數據的情況發送不同的消息到一消息隊列;所述不可控模塊間隔性 的觸發ontimer消息到所述消息隊列,所述不可控模塊循環檢測所述消息隊列中的消息, 根據檢測到的消息進行相應的處理。進一步的,所述主進程判斷所述不可控模塊是否運行的方法為主進程檢測當前時間與所述時間存儲部分的時間之差是否大于所述閾值A,如果大于則判斷為所述不可控 模塊未運行,否則判斷為所述不可控模塊處于運行狀態。進一步的,所述閾值A小于所述閾值B ;所述閾值A為2秒,所述閾值B為3秒。進一步的,所述主進程將存放在所述待處理數據存儲部分的數據塊進行編號,所 述不可控模塊對數據塊進行數據處理時保持數據塊編號不變。進一步的,所述主進程根據編號檢測所述處理完數據存儲部分是否有對應的數 據。進一步的,所述數據處理消息和所述退出消息由一宏定義產生。本發明的積極效果為 與現有技術相比,本發明既可以提高系統穩定性,又可以大大節約系統資源,從而 使系統性能得到顯著提升。
圖1為本發明的總體結構圖;圖2為本發明主進程的處理流程圖;圖3為本發明子進程的處理流程圖。
具體實施例方式下面結合附圖和具體實施方式
對本發明作進一步詳細描述在windows系統運行中,很多情況下必須加載某些不可控模塊,在此模塊中內部 的很多資源釋放是未知,當長期運行程序或是反復的運行程序,都會引起占用大量的內存 資源,針對這樣的問題本發明采用多進程內存映射文件的方式來解決。不可控模塊是用來 做數據的解析部分,并要從不可控模塊中取出解析后的數據,這樣就可以把加載不可控模 塊的部分做一個單獨子進程。當主程序有數據需要解析的時候,運行單獨子進程,解析完后 的數據放到內存映射文件中,主進程從中取出解析出來的數據。子進程中有一個時間空循 環程序,實時的檢測目前的系統時間與處理上一個數據之間的時間差,如果超過一定的值, 說明長時間主進程沒有數據需要處理,直接卸載子進程。主進程在每次需要解析數據的時 候都檢測子進程是否在運行,如果已經卸載,重新啟動子進程。這樣保證當主進程和子進程 之間通信,當主進程中沒有數據的時候,子進程占用的資源可以及時的進行釋放,避免了大 量的占用內存及內存泄露問題。如圖1所示,本發明的總體結構主要分為兩個部分主進程和子進程。主進程和 子進程通過把數據放到內存映射文件來實現數據的交互,本發明把內存映射文件分為三部 分,第一部分待處理數據部分,第二部分存儲處理完數據,第三部分用來存儲時間。下面主要分為主進程處理和子進程處理兩部分進行介紹。在每次主進程需要往內存映射文件中存放數據的時候,首先檢測子進程是否存 活。檢測的方式為采用當前系統的時間跟內存映射文件中存放的時間數據比較,如果差值 超過2s鐘,就認為子進程已經退出,重新啟動子進程,這樣就可以重新進行數據的處理。主 進程把待處理數據寫入內存映射文件的同時,在存儲待處理數據的前4個字節中存放此待 處理數據塊的數據編號,方便對處理后數據進行校驗。主進程和子進程之間的采用消息機制進行通信,采用宏來自定義兩類消息,一類為處理數據消息;一類為退出消息。當主進程 把待處理數據放到的內存映射文件中后就會發送一個處理數據消息到消息隊列中;當主進 程沒有數據需要數據處理時,發送一個退出消息到消息隊列中。主進程中在不停的檢測保 存處理完數據的前4個字節是否與待處理數據塊前的數據編號相同,如果相同,就會取出 處理后數據進行下一步的工作。如果不同,就循環的判斷,循環的次數限制在20次。多于 20次就自動退出主程序,防止程序死循環。 子進程中是一個消息循環的機制,不停的檢測消息隊列中是否有符合條件的消 息,主要處理三類消息,1 :ontimer時間循環消息;2 處理數據消息;3 退出消息。Ontimer 時間循環消息為子進程中一個按時間觸發的消息;處理數據消息和退出消息采用于主進程 中一樣的宏自定義消息。設置一臨時變量用于保存子進程最近一次(即上一次)數據處理 時的時間,如果子進程檢測到為ontimer消息,首先判斷當前時間和記錄的臨時變量的時 間的時間間隔是否大于3s,如果大于3s就認為主進程長時間沒有數據需要處理或者主進 程已退出,退出子進程。如果時間小于或等于3s,把當前時間寫入內存映射文件的時間存儲 部分。Ontimer設置為100ms觸發一次,這樣保證時間間隔小于主進程中檢測的時間。如果 子進程中檢測消息隊列中有處理數據消息就進行數據的處理,把當前的系統時間保存到一 個臨時變量中。數據處理完后把數據放到內存映射文件的保存處理完數據的位置。子進程 把處理完數據寫入內存映射文件的同時,數據的前4個字節為處理的數據塊的編號,保持 與處理前數據塊編號不變。如果檢測到為退出消息,直接退出子進程。
權利要求
一種增強系統穩定性的方法,其步驟為1)建立一內存映射文件,其包括待處理數據存儲部分、處理完數據存儲部分;2)主進程將需要某不可控模塊處理的數據存放在所述待處理數據存儲部分,同時判斷該不可控模塊是否運行;如果未運行則啟動該不可控模塊;3)主進程發送一數據處理消息給該不可控模塊;4)該不可控模塊收到所述數據處理消息后,對數據進行處理;5)該不可控模塊將處理后的數據放到所述處理完數據存儲部分;6)主進程循環檢測所述處理完數據存儲部分是否有對應的數據,如果有則讀取該數據,然后判斷后續是否有需要該不可控模塊處理的數據,如果沒有則發送一退出消息給該不可控模塊;如果主進程在設定的循環次數內沒有檢測到對應的數據則退出。
2.如權利要求1所述的方法,其特征在于所述內存映射文件還包括一時間存儲部分。
3.如權利要求2所述的方法,其特征在于設置一臨時變量,用于保存所述不可控模塊 最近一次數據處理時的時間;所述不可控模塊間隔性的判斷當前時間與所述臨時變量中記 錄的時間間隔是否大于設定閾值B,如果大于則退出,否則把當前時間寫入所述時間存儲部 分。
4.如權利要求3所述的方法,其特征在于所述主進程和不可控模塊之間通過自定義消 息進行通信,其方法為所述主進程根據需要處理數據的情況發送不同的消息到一消息隊 列;所述不可控模塊間隔性的觸發ontimer消息到所述消息隊列,所述不可控模塊循環檢 測所述消息隊列中的消息,根據檢測到的消息進行相應的處理。
5.如權利要求3所述的方法,其特征在于所述主進程判斷所述不可控模塊是否運行的 方法為主進程檢測當前時間與所述時間存儲部分的時間之差是否大于所述閾值A,如果 大于則判斷為所述不可控模塊未運行,否則判斷為所述不可控模塊處于運行狀態。
6.如權利要求5所述的方法,其特征在于所述閾值A小于所述閾值B;所述閾值A為2 秒,所述閾值B為3秒。
7.如權利要求1所述的方法,其特征在于所述主進程將存放在所述待處理數據存儲部 分的數據塊進行編號,所述不可控模塊對數據塊進行數據處理時保持數據塊編號不變。
8.如權利要求7所述的方法,其特征在于所述主進程根據編號檢測所述處理完數據存 儲部分是否有對應的數據。
9.如權利要求1所述的方法,其特征在于所述數據處理消息和所述退出消息由一宏定 義產生。
全文摘要
本發明公開了一種增強系統穩定性的方法,屬于軟件技術領域。本發明方法為1)建立一內存映射文件,其包括待處理數據存儲部分、處理完數據存儲部分;2)主進程將需某不可控模塊處理的數據存放在待處理數據存儲部分,并判斷是否需啟動該不可控模塊;3)主進程發送一數據處理消息給該不可控模塊;4)該不可控模塊對數據進行處理并將處理后的數據放到處理完數據存儲部分;5)主進程循環檢測處理完數據存儲部分是否有對應的數據,若有則讀取該數據,然后判斷后續是否有需該不可控模塊處理的數據,若沒有則發送一退出消息給該不可控模塊;若主進程在設定循環次數內沒有檢測到對應的數據則退出。本發明既可提高系統穩定性,又可大大節約系統資源。
文檔編號G06F9/46GK101876922SQ200910236980
公開日2010年11月3日 申請日期2009年10月30日 優先權日2009年10月30日
發明者張娟娟 申請人:北京銳安科技有限公司