專利名稱:動態(tài)刷新數(shù)據(jù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理,特別是涉及一種動態(tài)刷新數(shù)據(jù)的方法。
背景技術(shù):
在一些公共服務(wù)終端上,為客戶提供不同服務(wù)時,需要對終端設(shè)備或運行其上的業(yè)務(wù)軟件進行相應(yīng)的配置。傳統(tǒng)的對配置信息的修改主要實現(xiàn)方式是“首先停止業(yè)務(wù)軟件,再修改配置信息,然后再重新開啟業(yè)務(wù)軟件”。這樣程序就可以按照新的配置來進行處理。這種修改配置的方式存在如下問題:1.操作步驟繁瑣,需要先停止業(yè)務(wù)軟件,然后再修改配置信息,最后再重新開啟業(yè)務(wù)軟件;2.當(dāng)業(yè)務(wù)軟件所提供的功能比較多時,而本次修改的配置信息對其他功能的運行沒有影響時,若停止該業(yè)務(wù)軟件會對其他功能的正常運作造成影響;3.對某些不允許中間暫停的程序則必須要等到業(yè)務(wù)結(jié)束時才可以修改配置;4.不能滿足某些軟件要求系統(tǒng)每天24小時不間斷運行的要求。一種典型的需要持續(xù)運行的公共服務(wù)終端如軌道交通中的進出站閘機,進出站閘機可以通過修改配置來使其成為入口或出口。在軌道交通管理系統(tǒng)中,參數(shù)文件由清算管理中心(AFC clearing center, ACC)中心統(tǒng)一管理。當(dāng)需要更新設(shè)備軟件或者業(yè)務(wù)軟件的參數(shù)配置時,首先由ACC生成參數(shù)文件后下發(fā)至各線路計算機(Line Computer, LC)中心,然后再由各LC中心轉(zhuǎn)發(fā)至本線路下各個車站計算機(Station Computer, SC)。當(dāng)各車站接收到LC發(fā)送的參數(shù)文件后,將參數(shù)文件轉(zhuǎn)發(fā)至本站內(nèi)的各個終端設(shè)備。各終端設(shè)備為了使接收到的參數(shù)信息立即生效,則必須重新啟動設(shè)備軟件,這樣在重啟過程中無法提供服務(wù),會影響乘客的正常通行。
發(fā)明內(nèi)容
基于此,有必要提供一種不需要停止業(yè)務(wù)軟件即可使配置即時生效的動態(tài)刷新數(shù)據(jù)的方法。一種動態(tài)刷新數(shù)據(jù)的方法,包括如下步驟:建立需要被刷新的目標(biāo)函數(shù)與事件的關(guān)聯(lián)關(guān)系,所述事件由操作觸發(fā);監(jiān)聽事件,當(dāng)事件觸發(fā)時,檢測內(nèi)存控制開關(guān)的狀態(tài);當(dāng)所述內(nèi)存控制開關(guān)處于第一狀態(tài)時,根據(jù)所述觸發(fā)的事件加載相應(yīng)的數(shù)據(jù)到內(nèi)存中的第一數(shù)據(jù)區(qū),并調(diào)用所有關(guān)聯(lián)的目標(biāo)函數(shù)進行數(shù)據(jù)刷新;當(dāng)所述內(nèi)存控制開關(guān)處于第二狀態(tài)時,根據(jù)所述觸發(fā)的事件加載相應(yīng)的數(shù)據(jù)到內(nèi)存中的第二數(shù)據(jù)區(qū),并調(diào)用所有關(guān)聯(lián)的目標(biāo)函數(shù)進行數(shù)據(jù)刷新。在其中一個實施例中,所述第一數(shù)據(jù)區(qū)和第二數(shù)據(jù)區(qū)互為備用數(shù)據(jù)區(qū)。在其中一個實施例中,所述建立需要被刷新的目標(biāo)函數(shù)與事件的關(guān)聯(lián)關(guān)系的步驟在設(shè)備或業(yè)務(wù)軟件初始化時完成;當(dāng)初始化時,將內(nèi)存控制開關(guān)置于第一狀態(tài)或第二狀態(tài),以默認(rèn)的數(shù)據(jù)執(zhí)行刷新后即開始監(jiān)聽事件的步驟;在每次事件觸發(fā)且成功加載數(shù)據(jù)后將內(nèi)存控制開關(guān)的狀態(tài)置于與所述第一狀態(tài)或第二狀態(tài)相對的第二狀態(tài)或第一狀態(tài)。在其中一個實施例中,所述監(jiān)聽事件的步驟具體包括:讀取事件列表,所述事件列表包含由操作觸發(fā)的事件;判斷所述事件列表中是否有未處理事件,若是,則根據(jù)選擇策略選擇其中一個事件,同時置刷新標(biāo)識為真;否則,置刷新標(biāo)識為假,同時繼續(xù)執(zhí)行判斷事件列表中是否有未處理事件的步驟。在其中一個實施例中,所述監(jiān)聽事件的步驟還包括:在加載數(shù)據(jù)的步驟執(zhí)行成功時更新所述事件列表。在其中一個實施例中,還包括判斷所述刷新標(biāo)識是否為真的步驟,若所述刷新標(biāo)識為真,則執(zhí)行加載數(shù)據(jù)的步驟,否則休眠預(yù)設(shè)時間后繼續(xù)判斷所述刷新標(biāo)識是否為真。在其中一個實施例中,所述預(yù)設(shè)時間為10毫秒。在其中一個實施例中,還包括判斷數(shù)據(jù)是否加載成功的步驟,當(dāng)數(shù)據(jù)加載成功時,將內(nèi)存控制開關(guān)置為另一狀態(tài),并設(shè)置事件處理結(jié)果為成功;否則設(shè)置事件處理結(jié)果為失敗,并轉(zhuǎn)向判斷所述刷新標(biāo)識是否為真的步驟。在其中一個實施例中,所述根據(jù)觸發(fā)的事件加載的數(shù)據(jù)為配置文件。上述方法通過事件觸發(fā)機制來執(zhí)行數(shù)據(jù)刷新操作,同時在每次刷新數(shù)據(jù)時,在另外的內(nèi)存區(qū)域加載數(shù)據(jù)并執(zhí)行數(shù)據(jù)刷新操作,使得程序既讀取了新的配置數(shù)據(jù),實現(xiàn)了配置的即時修改,又不會導(dǎo)致程序運行中斷。
圖1和圖2為一實施例的動態(tài)刷新數(shù)據(jù)的方法流程圖;圖3為內(nèi)存區(qū)域劃分及控制讀寫數(shù)據(jù)的示意圖。
具體實施例方式如圖1和圖2所示,為一實施例的動態(tài)刷新數(shù)據(jù)的方法流程圖。該方法基于統(tǒng)一接口的函數(shù)調(diào)用和內(nèi)存交換技術(shù),實現(xiàn)進程不受中斷地讀取修改后的配置文件的目的,達到使配置即時生效的效果。如圖3所示,該方法在內(nèi)存中劃分用于存儲數(shù)據(jù)的第一數(shù)據(jù)區(qū)和第二數(shù)據(jù)區(qū),并采用內(nèi)存控制開關(guān)控制往第一數(shù)據(jù)區(qū)或第二數(shù)據(jù)區(qū)寫數(shù)據(jù)(即保存數(shù)據(jù)),或者從第一數(shù)據(jù)區(qū)或第二數(shù)據(jù)區(qū)讀數(shù)據(jù)。第一數(shù)據(jù)區(qū)和第二數(shù)據(jù)區(qū)互為備用數(shù)據(jù)區(qū)。該方法包括如下步驟:SllO:運行初始化線程。程序啟動時調(diào)用初始化接口,進行初始化數(shù)據(jù)操作。初始化線程主要執(zhí)行如下步驟。步驟Slll:建立需要被刷新的目標(biāo)函數(shù)與事件的關(guān)聯(lián)關(guān)系,所述事件由操作觸發(fā)。以事件驅(qū)動的程序中,首先需要將目標(biāo)函數(shù)注冊,即建立需要被刷新的目標(biāo)函數(shù)與事件的關(guān)聯(lián)關(guān)系(或者添加與該事件對應(yīng)的處理函數(shù))。觸發(fā)事件的操作包括修改設(shè)備或軟件配置的操作等。當(dāng)事件被觸發(fā)時,相應(yīng)的處理函數(shù)(目標(biāo)函數(shù))被調(diào)用,以完成相應(yīng)的功能。在一個實施例中,利用函數(shù)指針注冊目標(biāo)函數(shù)。除此之外,當(dāng)初始化時,還包括:
步驟S113:將內(nèi)存控制開關(guān)置于第一狀態(tài)或第二狀態(tài)。本步驟用于指定下一次加載的數(shù)據(jù)保存的內(nèi)存區(qū)域。步驟S115:以默認(rèn)的數(shù)據(jù)執(zhí)行刷新操作。要刷新數(shù)據(jù),首先需要加載數(shù)據(jù)到內(nèi)存中,本步驟依賴于步驟S140,若步驟S140中加載數(shù)據(jù)操作成功,則執(zhí)行步驟S117,否則停止。步驟S117:將內(nèi)存控制開關(guān)置于與第一狀態(tài)或第二狀態(tài)相對的第二狀態(tài)或第一狀態(tài)。數(shù)據(jù)加載成功后,也即讀入到內(nèi)存相應(yīng)數(shù)據(jù)區(qū)后,業(yè)務(wù)軟件即可通過統(tǒng)一的調(diào)用接口來刷新數(shù)據(jù)。然后將內(nèi)存控制開關(guān)置于相反的狀態(tài),也即下次事件觸發(fā)時,將數(shù)據(jù)加載到內(nèi)存的兩個數(shù)據(jù)區(qū)中的另一個數(shù)據(jù)區(qū)。通常來說,系統(tǒng)中會有一個默認(rèn)的主數(shù)據(jù)區(qū),另一個則是備用數(shù)據(jù)區(qū)。例如本實施例中,第一數(shù)據(jù)區(qū)為主數(shù)據(jù)區(qū),第二數(shù)據(jù)區(qū)為備用數(shù)據(jù)區(qū)。在程序初始化時,將數(shù)據(jù)默認(rèn)加載到主數(shù)據(jù)區(qū),因此步驟S113中也將內(nèi)存控制開關(guān)置于第一狀態(tài),從而使得在刷新數(shù)據(jù)時能夠從作為主數(shù)據(jù)區(qū)的第一數(shù)據(jù)區(qū)中讀取用于刷新的數(shù)據(jù)。之后,內(nèi)存控制開關(guān)的狀態(tài)被置為第二狀態(tài)。例如,在一個實施例中,初始化時,將內(nèi)存控制開關(guān)的狀態(tài)置為FALSE,然后加載并刷新數(shù)據(jù)。若成功加載,那么加載完成后將內(nèi)存控制開關(guān)的狀態(tài)置為TRUE。在步驟SllO的初始化完成之后,即開始步驟S120:運行事件掃描線程。事件掃描線程用于監(jiān)聽系統(tǒng)中產(chǎn)生的事件,并進行相關(guān)的處理。主要包括:步驟S121:檢測事件列表中是否有未處理事件。若是,則執(zhí)行步驟S123,否則執(zhí)行步驟S125后返回步驟Sm。當(dāng)需要刷新數(shù)據(jù)時,執(zhí)行數(shù)據(jù)刷新操作,繼而觸發(fā)事件,不同的操作不斷產(chǎn)生時,就會觸發(fā)多個事件。多個事件根據(jù)觸發(fā)時間,依次保存在事件列表中。若事件列表中存在未處理事件,則代表有刷新數(shù)據(jù)的操作,此時需要對該事件進行處理。本步驟通過循環(huán)檢測的方式實現(xiàn)監(jiān)聽。步驟S123:根據(jù)選擇策略選擇其中一個事件,設(shè)置刷新標(biāo)識為真。本實施例的選擇策略即先到先得(FIFO),事件按照到來的時間依次從小到大編號,每次都選擇編號最小的事件。步驟S125:設(shè)置刷新標(biāo)識為假。上述的刷新標(biāo)識用于告知數(shù)據(jù)加載線程是否有事件觸發(fā),從而決定是否加載數(shù)據(jù)。經(jīng)過步驟S12f S125,事件掃描線程輸出值為真或假的刷新標(biāo)識。步驟S130:運行數(shù)據(jù)刷新線程。本步驟用于執(zhí)行刷新數(shù)據(jù)的操作。包括如下步驟:步驟S131:檢測刷新標(biāo)識是否為真。若是,則執(zhí)行步驟S140,否則執(zhí)行步驟S133并返回步驟S131。當(dāng)刷新標(biāo)識為真時,執(zhí)行步驟S140對事件進行處理。否則循環(huán)執(zhí)行檢測刷新標(biāo)識是否為真的步驟。步驟S133:睡眠預(yù)設(shè)時間。本實施例中,預(yù)設(shè)時間優(yōu)選為10毫秒。同時,在數(shù)據(jù)刷新線程內(nèi),還執(zhí)行步驟S135:檢測步驟S140中加載數(shù)據(jù)的操作是否成功。若是,則執(zhí)行步驟S137,否則返回步驟S131。步驟S137:將內(nèi)存控制開關(guān)的狀態(tài)取反。也即從第一狀態(tài)變成第二狀態(tài),或者從第二狀態(tài)變?yōu)榈谝粻顟B(tài)。每次事件觸發(fā)并且數(shù)據(jù)加載成功后,將內(nèi)存控制開關(guān)的狀態(tài)取反,以指定下一次事件觸發(fā)時將數(shù)據(jù)加載到另一數(shù)據(jù)區(qū)。步驟S130還根據(jù)步驟S140的執(zhí)行結(jié)果生成事件處理的結(jié)果。
該事件處理的結(jié)果還被事件掃描線程(步驟S120)讀取,并執(zhí)行如下步驟。步驟S127:判斷事件是否處理完成。若是,則執(zhí)行步驟S129,否則返回執(zhí)行步驟S127。步驟S129:更新事件列表。將已經(jīng)處理完成的事件的狀態(tài)更改為已處理。至此,一個事件被處理完成,同時刷新操作被執(zhí)行。若事件列表中還有其他的事件,則重復(fù)上述自步驟S121開始的步驟處理下一事件。步驟S140:運行數(shù)據(jù)加載線程。包括:步驟S141:檢測內(nèi)存控制開關(guān)的狀態(tài)。若內(nèi)存控制開關(guān)的狀態(tài)為第一狀態(tài),則執(zhí)行步驟S143,若內(nèi)存控制開關(guān)的狀態(tài)為第二狀態(tài),則執(zhí)行步驟S145。步驟S143:調(diào)用所有建立關(guān)系的目標(biāo)函數(shù),加載數(shù)據(jù),并將數(shù)據(jù)存儲在第一數(shù)據(jù)區(qū)。以內(nèi)存中的第一數(shù)據(jù)區(qū)運行目標(biāo)函數(shù),執(zhí)行數(shù)據(jù)刷新操作。步驟S145:調(diào)用所有建立關(guān)系的目標(biāo)函數(shù),加載數(shù)據(jù),并將數(shù)據(jù)存儲在第二數(shù)據(jù)區(qū)。以內(nèi)存中的第二數(shù)據(jù)區(qū)運行目標(biāo)函數(shù),執(zhí)行數(shù)據(jù)刷新操作。步驟S147:返回執(zhí)行結(jié)果。本實施例方法中所涉及的根據(jù)觸發(fā)的事件加載的數(shù)據(jù)為配置文件,用于實時更改設(shè)備或業(yè)務(wù)軟件的配置。以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種動態(tài)刷新數(shù)據(jù)的方法,包括如下步驟: 建立需要被刷新的目標(biāo)函數(shù)與事件的關(guān)聯(lián)關(guān)系,所述事件由操作觸發(fā); 監(jiān)聽事件,當(dāng)事件觸發(fā)時,檢測內(nèi)存控制開關(guān)的狀態(tài); 當(dāng)所述內(nèi)存控制開關(guān)處于第一狀態(tài)時,根據(jù)所述觸發(fā)的事件加載相應(yīng)的數(shù)據(jù)到內(nèi)存中的第一數(shù)據(jù)區(qū),并調(diào)用所有關(guān)聯(lián)的目標(biāo)函數(shù)進行數(shù)據(jù)刷新; 當(dāng)所述內(nèi)存控制開關(guān)處于第二狀態(tài)時,根據(jù)所述觸發(fā)的事件加載相應(yīng)的數(shù)據(jù)到內(nèi)存中的第二數(shù)據(jù)區(qū),并調(diào)用所有關(guān)聯(lián)的目標(biāo)函數(shù)進行數(shù)據(jù)刷新。
2.根據(jù)權(quán)利要求1所述的動態(tài)刷新數(shù)據(jù)的方法,其特征在于,所述第一數(shù)據(jù)區(qū)和第二數(shù)據(jù)區(qū)互為備用數(shù)據(jù)區(qū)。
3.根據(jù)權(quán)利要求1所述的動態(tài)刷新數(shù)據(jù)的方法,其特征在于,所述建立需要被刷新的目標(biāo)函數(shù)與事件的關(guān)聯(lián)關(guān)系的步驟在設(shè)備或業(yè)務(wù)軟件初始化時完成;當(dāng)初始化時,將內(nèi)存控制開關(guān)置于第一狀態(tài)或第二狀態(tài),以默認(rèn)的數(shù)據(jù)執(zhí)行刷新后即開始監(jiān)聽事件的步驟;在每次事件觸發(fā)且成功加載數(shù)據(jù)后將內(nèi)存控制開關(guān)的狀態(tài)置于與所述第一狀態(tài)或第二狀態(tài)相對的第二狀態(tài)或第一狀態(tài)。
4.根據(jù)權(quán)利要求1所述的動態(tài)刷新數(shù)據(jù)的方法,其特征在于,所述監(jiān)聽事件的步驟具體包括: 讀取事件列表,所述事件列表包含由操作觸發(fā)的事件; 判斷所述事件列表中是否有未處理事件,若是,則根據(jù)選擇策略選擇其中一個事件,同時置刷新標(biāo)識為真;否則,置刷新標(biāo)識為假,同時繼續(xù)執(zhí)行判斷事件列表中是否有未處理事件的步驟。
5.根據(jù)權(quán)利要求4所述的動態(tài)刷新數(shù)據(jù)的方法,其特征在于,所述監(jiān)聽事件的步驟還包括:在加載數(shù)據(jù)的步驟執(zhí)行成功時更新所述事件列表。
6.根據(jù)權(quán)利要求4所述的動態(tài)刷新數(shù)據(jù)的方法,其特征在于,還包括判斷所述刷新標(biāo)識是否為真的步驟,若所述刷新標(biāo)識為真,則執(zhí)行加載數(shù)據(jù)的步驟,否則休眠預(yù)設(shè)時間后繼續(xù)判斷所述刷新標(biāo)識是否為真。
7.根據(jù)權(quán)利要求6所述的動態(tài)刷新數(shù)據(jù)的方法,其特征在于,所述預(yù)設(shè)時間為10毫秒。
8.根據(jù)權(quán)利要求6所述的動態(tài)刷新數(shù)據(jù)的方法,其特征在于,還包括判斷數(shù)據(jù)是否加載成功的步驟,當(dāng)數(shù)據(jù)加載成功時,將內(nèi)存控制開關(guān)置為另一狀態(tài),并設(shè)置事件處理結(jié)果為成功;否則設(shè)置事件處理結(jié)果為失敗,并轉(zhuǎn)向判斷所述刷新標(biāo)識是否為真的步驟。
9.根據(jù)權(quán)利要求1至8任一項所述的動態(tài)刷新數(shù)據(jù)的方法,其特征在于,所述根據(jù)觸發(fā)的事件加載的數(shù)據(jù)為配置文件。
全文摘要
本發(fā)明公開一種動態(tài)刷新數(shù)據(jù)的方法,包括如下步驟建立需要被刷新的目標(biāo)函數(shù)與事件的關(guān)聯(lián)關(guān)系,所述事件由操作觸發(fā);監(jiān)聽事件,當(dāng)事件觸發(fā)時,檢測內(nèi)存控制開關(guān)的狀態(tài);當(dāng)所述內(nèi)存控制開關(guān)處于第一狀態(tài)時,根據(jù)所述觸發(fā)的事件加載相應(yīng)的數(shù)據(jù)到內(nèi)存中的第一數(shù)據(jù)區(qū),并調(diào)用所有關(guān)聯(lián)的目標(biāo)函數(shù)進行數(shù)據(jù)刷新;當(dāng)所述內(nèi)存控制開關(guān)處于第二狀態(tài)時,根據(jù)所述觸發(fā)的事件加載相應(yīng)的數(shù)據(jù)到內(nèi)存中的第二數(shù)據(jù)區(qū),并調(diào)用所有關(guān)聯(lián)的目標(biāo)函數(shù)進行數(shù)據(jù)刷新。上述方法能夠?qū)崿F(xiàn)配置即時生效。
文檔編號G07C9/00GK103093529SQ20131000915
公開日2013年5月8日 申請日期2013年1月10日 優(yōu)先權(quán)日2013年1月10日
發(fā)明者范濱, 胡宇舟, 李強, 楊興城, 吳光冠, 孫立中 申請人:高新現(xiàn)代智能系統(tǒng)股份有限公司