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