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