一種軟件定時(shí)器的優(yōu)化方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種軟件定時(shí)器的優(yōu)化方法,包括:創(chuàng)建第一和第二定時(shí)器數(shù)組;定義總運(yùn)行時(shí)間T1和每個(gè)時(shí)刻所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2,初始化T1和所述T2為零;等待時(shí)間片后,總運(yùn)行時(shí)間T1加1,記錄T1’;根據(jù)鏈表索引號(hào)將定時(shí)器實(shí)例對(duì)象添加至第一定時(shí)器數(shù)組的鏈表數(shù)組元素,檢測(cè)定時(shí)器實(shí)例對(duì)象的超時(shí),記錄超時(shí)時(shí)間T3,生成索引時(shí)刻;根據(jù)索引時(shí)刻將與其對(duì)應(yīng)的定時(shí)器實(shí)例對(duì)象添加至第二定時(shí)器數(shù)組的鏈表數(shù)組元素;在第二定時(shí)器數(shù)組中循環(huán)執(zhí)行超時(shí)回調(diào)處理函數(shù),之后刪除該定時(shí)器實(shí)例對(duì)象,直至執(zhí)行完畢所有定時(shí)器實(shí)例對(duì)象。本發(fā)明提高定時(shí)器實(shí)例對(duì)象的操作效率,極大的減少CPU的占用率,對(duì)定時(shí)器進(jìn)行時(shí)間漂移補(bǔ)償,提高定時(shí)器的定時(shí)準(zhǔn)確度。
【專利說明】一種軟件定時(shí)器的優(yōu)化方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明計(jì)算機(jī)通信【技術(shù)領(lǐng)域】,涉及一種優(yōu)化方法及系統(tǒng),特別是涉及一種軟件定時(shí)器的優(yōu)化方法及系統(tǒng)。
【背景技術(shù)】
[0002]嵌入式多任務(wù)系統(tǒng)軟件設(shè)計(jì)中經(jīng)常會(huì)用到定時(shí)器,分為硬件定時(shí)器和軟件定時(shí)器。硬件定時(shí)器通過中斷方式實(shí)現(xiàn),時(shí)間準(zhǔn)確度高,但使用限制較多,如超時(shí)處理函數(shù)有阻塞,定時(shí)器較多時(shí)多中斷對(duì)系統(tǒng)性能有影響。而傳統(tǒng)的軟件定時(shí)器通過一個(gè)軟件定時(shí)器鏈表去管理定時(shí)器實(shí)例對(duì)象的所有操作,包括定時(shí)器實(shí)例對(duì)象的創(chuàng)建,啟動(dòng),超時(shí)檢測(cè)及處理,停止及刪除。每次超時(shí)判斷都會(huì)去循環(huán)遍歷掃描鏈表中所有的定時(shí)器實(shí)例對(duì)象是否有超時(shí),將超時(shí)的所有定時(shí)器進(jìn)行相應(yīng)回調(diào)處理,若果定時(shí)器實(shí)例對(duì)象應(yīng)用較多,成百上千時(shí),會(huì)占用很大的cpu資源,對(duì)定時(shí)器的管理效率低,且同一時(shí)刻超時(shí)的定時(shí)器會(huì)較多,執(zhí)行這些超時(shí)定時(shí)器的回調(diào)處理耗時(shí)總合也會(huì)較多,由于這部分耗時(shí)未計(jì)算在軟件定時(shí)器計(jì)時(shí)中,長(zhǎng)期累積將會(huì)造成軟件定時(shí)器時(shí)間偏移,定時(shí)不準(zhǔn)確的問題。
[0003]由于在軟件開發(fā)中經(jīng)常需要用到定時(shí)器,特別是在通信系統(tǒng)的設(shè)計(jì)中,有大量的定時(shí)要求。如在機(jī)架式EPON系統(tǒng)設(shè)計(jì)中,統(tǒng)計(jì)模塊需要針對(duì)每個(gè)監(jiān)控點(diǎn)啟動(dòng)定時(shí)器去定時(shí)采集數(shù)據(jù),監(jiān)控點(diǎn)可能上百個(gè)。在組播等協(xié)議模塊中,收發(fā)包都需要用到定時(shí)器:發(fā)送消息以后有時(shí)候需要對(duì)方在約定的時(shí)間內(nèi)收到對(duì)方的回應(yīng),如果在規(guī)定的時(shí)間內(nèi)收不到回應(yīng),需要進(jìn)行適當(dāng)?shù)奶幚?,或者重發(fā)消息,或者進(jìn)入出錯(cuò)處理。這些都對(duì)定時(shí)時(shí)間都較高要求。
[0004]對(duì)于通用的定時(shí)器管理方法來說,以下操作都是必須的:
[0005]I)創(chuàng)建定時(shí)器,creatTimer (interval, *app_calIback)。設(shè)置一個(gè)定時(shí)器實(shí)例,其中interval表示定時(shí)器的指定時(shí)長(zhǎng),*app_callback表示定時(shí)器超時(shí)的回調(diào)處理函數(shù)。函數(shù)返回一個(gè)可用的定時(shí)器標(biāo)識(shí)ID (timer ID);
[0006]2)啟動(dòng)定時(shí)器,startTimer (timer ID)。啟動(dòng)一個(gè)定時(shí)器實(shí)例,其中timerID為定時(shí)器的唯一標(biāo)識(shí);
[0007]3)停止定時(shí)器,stopTimer (timer ID)。停止一個(gè)定時(shí)器實(shí)例,其中timerID為定時(shí)器的唯一標(biāo)識(shí);
[0008]4)刪除定時(shí)器,destroyTimer (timerID)。在定時(shí)器超時(shí)前,根據(jù)已知的timerID查找到定時(shí)器實(shí)例對(duì)象,并將其刪除;
[0009]5)超時(shí)檢查和處理。將定時(shí)器的時(shí)長(zhǎng)劃分為若干個(gè)時(shí)間相等的時(shí)間片,在每個(gè)時(shí)間片內(nèi)檢查所管理的定時(shí)器實(shí)例是否有超時(shí),如果有,則觸發(fā)超時(shí)處理。檢測(cè)定時(shí)器的超時(shí),并進(jìn)行超時(shí)回調(diào)處理。
[0010]現(xiàn)有技術(shù)采用一個(gè)鏈表timerList來管理定時(shí)器實(shí)例對(duì)象的所有操作。給定超時(shí)時(shí)間tl,t2, t3及相應(yīng)的超時(shí)回調(diào)處理函數(shù),倉(cāng)Li建定時(shí)器實(shí)例索引timerl, timer2,timer3,請(qǐng)參閱圖1,顯示為現(xiàn)有技術(shù)中定時(shí)器實(shí)例索引存儲(chǔ)示意圖。設(shè)置相應(yīng)的剩余超時(shí)時(shí)間(timeout_interval)為tl,t2,t3。啟動(dòng)定時(shí)器時(shí)將定時(shí)器實(shí)例對(duì)象timerl, timer2,timer3按啟動(dòng)順序添加到定時(shí)器管理鏈表timerList中。停止定時(shí)器實(shí)例對(duì)象及刪除定時(shí)器實(shí)例對(duì)象時(shí)從定時(shí)器管理鏈表timerList開頭掃描找到要處理的定時(shí)器實(shí)例對(duì)象進(jìn)行相應(yīng)處理。
[0011]現(xiàn)有定時(shí)器實(shí)例對(duì)象的超時(shí)檢測(cè)和處理過程如下:
[0012]初始化創(chuàng)建一個(gè)定時(shí)器處理任務(wù),該任務(wù)執(zhí)行一個(gè)死循環(huán):先定時(shí)等待一個(gè)時(shí)間片(timerTick)( 一般用類taskDelay的系統(tǒng)調(diào)用),接下來將timerList鏈表頭指針的第一個(gè)定時(shí)器實(shí)例索引timerl的剩余時(shí)間timeout_interval減去時(shí)間片timerTick,然后判斷timeout_interval是否大于O。如果不大于O則說明這個(gè)定時(shí)器超時(shí),執(zhí)行相應(yīng)的超時(shí)回調(diào)處理函數(shù),并將這個(gè)定時(shí)器實(shí)例索引從鏈表中刪除。因?yàn)榭赡苡卸鄠€(gè)定時(shí)器同時(shí)超時(shí),因此第一個(gè)定時(shí)器實(shí)例索引處理完以后,還需要繼續(xù)掃描該定時(shí)器實(shí)例索引的下一個(gè)定時(shí)器實(shí)例索引,執(zhí)行同樣的操作,直到遍歷到鏈表結(jié)尾為止。
[0013]針對(duì)現(xiàn)有計(jì)數(shù)定時(shí)方案,對(duì)定時(shí)器的開啟,停止及刪除等操作處理以及定時(shí)器超時(shí)檢測(cè)處理都是通過掃描整個(gè)定時(shí)器鏈表完成的,當(dāng)定時(shí)器實(shí)例對(duì)象較多時(shí),比較消耗CPU資源。更嚴(yán)重的問題是在定時(shí)器處理任務(wù)中,每次時(shí)間片timerTick到時(shí)時(shí),就必須去掃描所有的定時(shí)器實(shí)例對(duì)象,而時(shí)間片到時(shí)間隔一般會(huì)很小(I個(gè)tick或Is),這樣將會(huì)很占用CPU資源,對(duì)系統(tǒng)的整體性能和穩(wěn)定性帶來的弊端。而且當(dāng)同一時(shí)刻超時(shí)的定時(shí)器過多,執(zhí)行定時(shí)器的處理回調(diào)函數(shù)比較耗時(shí)時(shí),耗時(shí)累積比較大,由于定時(shí)器未考慮這部分耗時(shí),會(huì)造成定時(shí)器時(shí)間偏移,定時(shí)不準(zhǔn),會(huì)對(duì)一些協(xié)議模塊等對(duì)時(shí)間要求較高的模塊造成影響,嚴(yán)重時(shí)會(huì)影響這些模塊的正常功能等。
【發(fā)明內(nèi)容】
[0014]鑒于以上所述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種軟件定時(shí)器的優(yōu)化方法及系統(tǒng),用于解決現(xiàn)有技術(shù)中定時(shí)器實(shí)例對(duì)象過多時(shí)對(duì)定時(shí)器的管理效率低,大量占用(PU資源,且定時(shí)器超時(shí)回調(diào)處理過程中的時(shí)間偏移導(dǎo)致定時(shí)時(shí)間不準(zhǔn)確的問題。
[0015]為實(shí)現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明一方面提供一種軟件定時(shí)器的優(yōu)化方法,應(yīng)用于若干個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊中,每一個(gè)業(yè)務(wù)模塊包括多個(gè)定時(shí)器實(shí)例對(duì)象,包括:步驟一,為每一個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊生成定時(shí)器鏈表索引號(hào),創(chuàng)建包括與所述業(yè)務(wù)模塊數(shù)量一致的鏈表數(shù)組元素的第一定時(shí)器數(shù)組;定義總運(yùn)行時(shí)間,記錄為Tl和每個(gè)時(shí)刻所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間,記錄為T2,初始化所述Tl和所述T2為零;所述定時(shí)器實(shí)例對(duì)象包括定時(shí)器超時(shí)回調(diào)處理函數(shù);步驟二,等待一時(shí)間片后,所述總運(yùn)行時(shí)間Tl自動(dòng)加1,記錄第一總運(yùn)行時(shí)間Tl’ ;步驟三,開啟所述業(yè)務(wù)模塊中的定時(shí)器實(shí)例對(duì)象,根據(jù)所述定時(shí)器鏈表索引號(hào)將所述業(yè)務(wù)模塊包括的多個(gè)定時(shí)器實(shí)例對(duì)象添加至所述第一定時(shí)器數(shù)組的鏈表數(shù)組元素中;步驟四,創(chuàng)建第二定時(shí)器數(shù)組,在所述第二定時(shí)器數(shù)組檢測(cè)所述定時(shí)器實(shí)例對(duì)象的超時(shí),記錄該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3,生成由該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3與第一總運(yùn)行時(shí)間Tl’之和組成的索引時(shí)刻;步驟五,根據(jù)所述索引時(shí)刻將與所述索引時(shí)刻相對(duì)應(yīng)的定時(shí)器實(shí)例對(duì)象添加至所述第二定時(shí)器數(shù)組的鏈表數(shù)組元素中;步驟六,在所述第二定時(shí)器數(shù)組中循環(huán)執(zhí)行所述鏈表數(shù)組元素下的定時(shí)器實(shí)例對(duì)象的超時(shí)回調(diào)處理函數(shù),執(zhí)行完后刪除該定時(shí)器實(shí)例對(duì)象,繼續(xù)執(zhí)行該定時(shí)器實(shí)例對(duì)象下的其他定時(shí)器實(shí)例對(duì)象,直至執(zhí)行完畢該鏈表數(shù)組元素下所有定時(shí)器實(shí)例對(duì)象,繼續(xù)下一次循環(huán)。
[0016]優(yōu)選地,所述軟件定時(shí)器的優(yōu)化方法還包括:判斷所述索引時(shí)刻是否小于等于第一總運(yùn)行時(shí)間Tl’與所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2之和,若是,則執(zhí)行下一步驟,若否,則記錄第二總運(yùn)行時(shí)間Tl” ;判斷所述第二定時(shí)器數(shù)組的鏈表數(shù)組元素中是否存在定時(shí)器實(shí)例對(duì)象,若是,則執(zhí)行下一步驟,若否,則返回步驟二,重新運(yùn)行所述軟件定時(shí)器的優(yōu)化方法;若所述鏈表數(shù)組元素中存在定時(shí)器實(shí)例對(duì)象,則在所述第二定時(shí)器數(shù)組中循環(huán)執(zhí)行所述鏈表數(shù)組元素的定時(shí)器實(shí)例對(duì)象的定時(shí)器超時(shí)回調(diào)處理函數(shù),之后刪除該定時(shí)器實(shí)例對(duì)象。
[0017]優(yōu)選地,所述軟件定時(shí)器的優(yōu)化方法還包括:判斷該定時(shí)器實(shí)例對(duì)象下是否還存在其他定時(shí)器實(shí)例對(duì)象,若是,則執(zhí)行超時(shí)回調(diào)處理函數(shù)的步驟,若否,則記錄第二總運(yùn)行時(shí)間Tl”;判斷第二總運(yùn)行時(shí)間Tl”與記錄第一總運(yùn)行時(shí)間Tl’之差是否大于所述時(shí)間片,若否,則表示為所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為零,若是,則表示為所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為為Tl”-Tl’,繼續(xù)下一次循環(huán)。
[0018]優(yōu)選地,所述定時(shí)器實(shí)例對(duì)象還包括記錄存在于所述第一定時(shí)器數(shù)組中鏈表數(shù)組元素的節(jié)點(diǎn)的第一節(jié)點(diǎn)指針、記錄存在于所述第二定時(shí)器數(shù)組中鏈表數(shù)組元素的節(jié)點(diǎn)的第二節(jié)點(diǎn)指針、及定時(shí)器超時(shí)回調(diào)處理參數(shù)。
[0019]優(yōu)選地,所述定時(shí)器實(shí)例對(duì)象中的第一節(jié)點(diǎn)指針記錄所述第一定時(shí)器數(shù)組中所述鏈表數(shù)組元素的首地址。所述定時(shí)器實(shí)例對(duì)象中的第二節(jié)點(diǎn)指針記錄所述第二定時(shí)器數(shù)組中鏈表數(shù)組元素的首地址。
[0020]優(yōu)選地,所述步驟六還包括根據(jù)所述定時(shí)器實(shí)例對(duì)象中的第一節(jié)點(diǎn)指針在所述第一定時(shí)器數(shù)組中刪除所述定時(shí)器實(shí)例對(duì)象。
[0021]優(yōu)選地,所述第一定時(shí)器數(shù)組為定時(shí)器管理鏈表數(shù)組,所述第二定時(shí)器數(shù)組為定時(shí)器超時(shí)檢測(cè)處理鏈表數(shù)組。
[0022]本發(fā)明另一方面還提供一種軟件定時(shí)器的優(yōu)化系統(tǒng),應(yīng)用于若干個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊中,每一個(gè)業(yè)務(wù)模塊包括多個(gè)定時(shí)器實(shí)例對(duì)象,包括:第一創(chuàng)建模塊,用于為每一個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊生成定時(shí)器鏈表索引號(hào),創(chuàng)建包括與所述業(yè)務(wù)模塊數(shù)量一致的鏈表數(shù)組元素的第一定時(shí)器數(shù)組;定義總運(yùn)行時(shí)間,記錄為Tl和每個(gè)時(shí)刻所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間,記錄為T2,初始化所述Tl和和所述T2為零;所述定時(shí)器實(shí)例對(duì)象包括定時(shí)器超時(shí)回調(diào)處理函數(shù);且所述第一創(chuàng)建模塊還用于等待一時(shí)間片后,為所述總運(yùn)行時(shí)間Tl自動(dòng)加1,記錄第一總運(yùn)行時(shí)間Tl’ ;管理模塊,用于開啟所述業(yè)務(wù)模塊中的定時(shí)器實(shí)例對(duì)象,根據(jù)所述定時(shí)器鏈表索引號(hào)將所述業(yè)務(wù)模塊包括的多個(gè)定時(shí)器實(shí)例對(duì)象添加至所述第一定時(shí)器數(shù)組的鏈表數(shù)組元素中;第二創(chuàng)建模塊,用于創(chuàng)建第二定時(shí)器數(shù)組,在所述第二定時(shí)器數(shù)組檢測(cè)所述定時(shí)器實(shí)例對(duì)象的超時(shí),記錄該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3,生成由該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3與第一總運(yùn)行時(shí)間Tl’之和組成的索引時(shí)刻;所述管理模塊還用于根據(jù)所述索引時(shí)刻將與所述索引時(shí)刻相對(duì)應(yīng)的定時(shí)器實(shí)例對(duì)象添加至所述第二定時(shí)器數(shù)組的鏈表數(shù)組元素中;處理模塊,用于在所述第二定時(shí)器數(shù)組中循環(huán)執(zhí)行所述鏈表數(shù)組元素下的定時(shí)器實(shí)例對(duì)象的超時(shí)回調(diào)處理函數(shù),執(zhí)行完后刪除該定時(shí)器實(shí)例對(duì)象,繼續(xù)執(zhí)行該定時(shí)器實(shí)例對(duì)象下的其他定時(shí)器實(shí)例對(duì)象,直至執(zhí)行完畢該鏈表數(shù)組元素下所有定時(shí)器實(shí)例對(duì)象。[0023]優(yōu)選地,所述軟件定時(shí)器的優(yōu)化系統(tǒng)還包括:第一判斷模塊和第二判斷模塊;其中,所述第一判斷模塊用于判斷所述索引時(shí)刻是否小于等于第一總運(yùn)行時(shí)間Tl’與所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2之和,若是,則調(diào)用所述第二判斷模塊,若否,則調(diào)用所述第二創(chuàng)建模塊記錄第二總運(yùn)行時(shí)間Tl” ;所述第二判斷模塊用于判斷所述第二定時(shí)器數(shù)組的鏈表數(shù)組元素中是否存在定時(shí)器實(shí)例對(duì)象,若是,調(diào)用所述處理模塊,若否,則重新運(yùn)行所述軟件定時(shí)器的優(yōu)化系統(tǒng);所述處理模塊用于若所述鏈表數(shù)組元素中存在其他定時(shí)器實(shí)例對(duì)象,則在所述第二定時(shí)器數(shù)組中循環(huán)執(zhí)行所述鏈表數(shù)組元素的定時(shí)器實(shí)例對(duì)象的定時(shí)器超時(shí)回調(diào)處理函數(shù),之后刪除該定時(shí)器實(shí)例對(duì)象。
[0024]優(yōu)選地,所述軟件定時(shí)器的優(yōu)化系統(tǒng)還包括:第三判斷模塊和第四判斷模塊;其中,所述第三判斷模塊用于判斷該定時(shí)器實(shí)例對(duì)象下是否還存在其他定時(shí)器實(shí)例對(duì)象,若是,則繼續(xù)調(diào)用所述處理模塊,執(zhí)行超時(shí)回調(diào)處理函數(shù)的步驟,若否,則調(diào)用所述第二創(chuàng)建模塊記錄第二總運(yùn)行時(shí)間Tl” ;所述第四判斷模塊用于判斷第二總運(yùn)行時(shí)間Tl”與記錄第一總運(yùn)行時(shí)間Tl’之差是否大于所述時(shí)間片,若否,則表示為所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為零,若是,則表示為所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為Tl”-Tl’,繼續(xù)下一次循環(huán)。
[0025]如上所述,本發(fā)明的軟件定時(shí)器的優(yōu)化方法及系統(tǒng),具有以下有益效果:
[0026]第一,本發(fā)明所述的軟件定時(shí)器的優(yōu)化方法及系統(tǒng)由于此設(shè)計(jì)按照模塊劃分定時(shí)器實(shí)例對(duì)象,提高了定時(shí)器實(shí)例對(duì)象的操作效率。對(duì)定時(shí)器按照超時(shí)時(shí)間添加到定時(shí)器超時(shí)檢測(cè)處理數(shù)組中,每個(gè)時(shí)刻只會(huì)去訪問處理當(dāng)前時(shí)刻已超時(shí)的定時(shí)器實(shí)例對(duì)象,不需訪問所有定時(shí)器實(shí)例對(duì)象,極大的減少的CPU的占用率。
[0027]第二,同時(shí)本發(fā)明所述的軟件定時(shí)器的優(yōu)化方法及系統(tǒng)對(duì)定時(shí)器對(duì)象的超時(shí)回調(diào)處理進(jìn)行了耗時(shí)計(jì)算,對(duì)定時(shí)器進(jìn)行了時(shí)間漂移補(bǔ)償,提高了定時(shí)器的定時(shí)準(zhǔn)確度。
【專利附圖】
【附圖說明】
[0028]圖1顯示為現(xiàn)有技術(shù)中定時(shí)器實(shí)例索引存儲(chǔ)示意圖示意圖。
[0029]圖2顯示為本發(fā)明的軟件定時(shí)器的優(yōu)化方法的流程圖。
[0030]圖3顯示為本發(fā)明的【具體實(shí)施方式】第一定時(shí)器數(shù)組中定時(shí)器實(shí)例對(duì)象存儲(chǔ)示意圖。
[0031]圖4顯示為本發(fā)明的【具體實(shí)施方式】第二定時(shí)器數(shù)組中定時(shí)器實(shí)例對(duì)象存儲(chǔ)示意圖。
[0032]圖5顯示為本發(fā)明的軟件定時(shí)器的優(yōu)化系統(tǒng)的原理結(jié)構(gòu)圖。
[0033]元件標(biāo)號(hào)說明
[0034]I 軟件定時(shí)器的優(yōu)化系統(tǒng)
[0035]11 第一創(chuàng)建模塊
[0036]12 管理模塊
[0037]13 第二創(chuàng)建模塊
[0038]14 處理模塊
[0039]15 第一判斷模塊
[0040]16 第二判斷模塊[0041]17 第三判斷模塊
[0042]18 第四判斷模塊
[0043]19 賦值模塊
[0044]SI ?S14 步驟
【具體實(shí)施方式】
[0045]以下通過特定的具體實(shí)例說明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點(diǎn)與功效。本發(fā)明還可以通過另外不同的【具體實(shí)施方式】加以實(shí)施或應(yīng)用,本說明書中的各項(xiàng)細(xì)節(jié)也可以基于不同觀點(diǎn)與應(yīng)用,在沒有背離本發(fā)明的精神下進(jìn)行各種修飾或改變。需說明的是,在不沖突的情況下,以下實(shí)施例及實(shí)施例中的特征可以相互組合。
[0046]需要說明的是,以下實(shí)施例中所提供的圖示僅以示意方式說明本發(fā)明的基本構(gòu)想,遂圖式中僅顯示與本發(fā)明中有關(guān)的組件而非按照實(shí)際實(shí)施時(shí)的組件數(shù)目、形狀及尺寸繪制,其實(shí)際實(shí)施時(shí)各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復(fù)雜。
[0047]本發(fā)明提供一種軟件定時(shí)器的優(yōu)化方法及系統(tǒng),所述軟件定時(shí)器的優(yōu)化方法及系統(tǒng)的發(fā)明原理為:
[0048]本發(fā)明專利設(shè)計(jì)采用兩個(gè)數(shù)組來處理定時(shí)器。定時(shí)器管理鏈表數(shù)組A[]和定時(shí)器超時(shí)檢測(cè)處理鏈表B []。系統(tǒng)啟動(dòng)后運(yùn)行的總運(yùn)行時(shí)刻gTimerJiffies (每次等待的時(shí)間片timerTick(可設(shè)置為Itick或Is)的累加總和)。每個(gè)時(shí)刻所有定時(shí)器實(shí)例對(duì)象超時(shí)處理需要的耗時(shí)時(shí)間gAlignmentTime。
[0049]使用數(shù)組A[]進(jìn)行定時(shí)器的創(chuàng)建,開啟,停止及刪除等操作管理處理。數(shù)組A[]為一個(gè)較小數(shù)組,可根據(jù)業(yè)務(wù)模塊數(shù)設(shè)置數(shù)組個(gè)數(shù),為每個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊生成一個(gè)定時(shí)器鏈表索引號(hào),該定時(shí)器鏈表索引號(hào)可索引數(shù)組A[]中的鏈表數(shù)組元素,將一業(yè)務(wù)模塊中的多個(gè)定時(shí)器實(shí)例對(duì)象以生成的定時(shí)器鏈表索引號(hào)添加到數(shù)組A[]中的鏈表數(shù)組元素中。由于將所有的定時(shí)器實(shí)例對(duì)象是按業(yè)務(wù)模塊進(jìn)行了劃分,對(duì)定時(shí)器實(shí)例對(duì)象的操作不需要遍歷所有的定時(shí)器實(shí)例對(duì)象,最壞情況下只需遍歷本模塊的定時(shí)器實(shí)例對(duì)象,業(yè)務(wù)模塊較多時(shí)提高了定時(shí)器實(shí)例對(duì)象的操作效率。
[0050]使用數(shù)組B[]進(jìn)行定時(shí)器的超時(shí)檢測(cè)和超時(shí)回調(diào)處理,數(shù)組B[]為一個(gè)大數(shù)組,每個(gè)鏈表數(shù)組元素為一個(gè)鏈表,鏈表的索引使用系統(tǒng)運(yùn)行的時(shí)刻進(jìn)行索引,每個(gè)鏈表數(shù)組元素存放的都是當(dāng)前時(shí)刻應(yīng)該執(zhí)行的定時(shí)器。
[0051]在開啟定時(shí)器實(shí)例對(duì)象的時(shí)候,以業(yè)務(wù)模塊為索引Modindex將定時(shí)器實(shí)例對(duì)象添加到數(shù)組A[ModIndex]中,以定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間timeout_interval加上當(dāng)前時(shí)刻gTimerJiffies的值為索引timelnedx,添加到B[timelnedx]的鏈表數(shù)組元素中。
[0052]初始化總運(yùn)行時(shí)刻gTimerJiffies為0,每個(gè)時(shí)刻所有定時(shí)器實(shí)例對(duì)象超時(shí)處理需要的耗時(shí)時(shí)間gAlignmentTime為0,定時(shí)器任務(wù)執(zhí)行一個(gè)死循環(huán),死循環(huán)每等待一個(gè)時(shí)間片timerTick后對(duì)總運(yùn)行時(shí)刻gTimerJiffies力口 1,接著從gTimerJiffies到gTimer Jiff ies+gAlignmentTime為索引依次執(zhí)行這些時(shí)刻超時(shí)的定時(shí)器回調(diào)處理函數(shù),全部執(zhí)行完以后gTimerJiffies設(shè)置為gTimerJiffies+gAlignmentTime,對(duì)定時(shí)器進(jìn)行補(bǔ)償。計(jì)數(shù)這些定時(shí)器所有的執(zhí)行的耗時(shí)時(shí)間,耗時(shí)時(shí)間大于timerTick時(shí)設(shè)置gAlignmentTime ο接著執(zhí)行下一次死循環(huán)。系統(tǒng)每個(gè)時(shí)刻只去訪問處理當(dāng)前時(shí)刻已超時(shí)的定時(shí)器實(shí)例對(duì)象,不需訪問所有定時(shí)器對(duì)象,極大的減少的CPU的占用率,同時(shí)對(duì)定時(shí)器對(duì)象的超時(shí)回調(diào)處理進(jìn)行了耗時(shí)計(jì)算,對(duì)定時(shí)器進(jìn)行了時(shí)間漂移補(bǔ)償,提高了定時(shí)器的定時(shí)準(zhǔn)確度。
[0053]實(shí)施例一
[0054]本實(shí)施例提供一種軟件定時(shí)器的優(yōu)化方法,應(yīng)用于若干個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊中,每一個(gè)業(yè)務(wù)模塊包括多個(gè)定時(shí)器實(shí)例對(duì)象,請(qǐng)參閱圖2,顯示為軟件定時(shí)器的軟化方法的流程圖,所述軟件定時(shí)器的優(yōu)化方法包括:
[0055]SI,為每一個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊生成定時(shí)器鏈表索引號(hào),創(chuàng)建包括與所述業(yè)務(wù)模塊數(shù)量一致的鏈表數(shù)組元素的第一定時(shí)器數(shù)組A[];定義總運(yùn)行時(shí)間,記錄為Tl,即gTimerJiffies,和每個(gè)時(shí)刻所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間,記錄為T2,即gAlignmentTime,初始化所述 Tl (gTimerJiffies)和所述 T2 (gAlignmentTime)為零。所述定時(shí)器實(shí)例對(duì)象包括記錄存在于所述第一定時(shí)器數(shù)組中鏈表數(shù)組元素的節(jié)點(diǎn)的第一節(jié)點(diǎn)指針、記錄存在于所述第二定時(shí)器數(shù)組中鏈表數(shù)組元素的節(jié)點(diǎn)的第二節(jié)點(diǎn)指針、定時(shí)器超時(shí)回調(diào)處理函數(shù)、及定時(shí)器超時(shí)回調(diào)處理參數(shù)。所述定時(shí)器實(shí)例對(duì)象中的第一節(jié)點(diǎn)指針記錄所述第一定時(shí)器數(shù)組中所述鏈表數(shù)組元素的首地址。所述定時(shí)器實(shí)例對(duì)象中的第二節(jié)點(diǎn)指針記錄所述第二定時(shí)器數(shù)組中鏈表數(shù)組元素的首地址。
[0056]S2,等待一時(shí)間片timerTick(在本實(shí)施例中,所述時(shí)間片timerTick可設(shè)置為Itick或Is)后,所述總運(yùn)行時(shí)間Tl (gTimerJiffies)自動(dòng)加I,記錄第一總運(yùn)行時(shí)間Tl,(gTimerJiffies) ο
[0057]S3,開啟所述業(yè)務(wù)模塊中的定時(shí)器實(shí)例對(duì)象,根據(jù)所述定時(shí)器鏈表索引號(hào)將所述業(yè)務(wù)模塊包括的多個(gè)定時(shí)器實(shí)例對(duì)象添加至所述第一定時(shí)器數(shù)組A[]的鏈表數(shù)組元素中。
[0058]S4,創(chuàng)建第二定時(shí)器數(shù)組B [],在所述第二定時(shí)器數(shù)組檢測(cè)所述定時(shí)器實(shí)例對(duì)象的超時(shí),記錄該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3,生成由該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3與第一總運(yùn)行時(shí)間Tl’之和組成的索引時(shí)刻。在本實(shí)施例中,所述第一定時(shí)器數(shù)組為定時(shí)器管理鏈表數(shù)組,所述第二定時(shí)器數(shù)組為定時(shí)器超時(shí)檢測(cè)處理鏈表數(shù)組。例如,在總運(yùn)行時(shí)間gTimerJiffies為1,2,3,4,5,6個(gè)等待的時(shí)間片timerTick的時(shí)刻分別開啟了業(yè)務(wù)模塊I的定時(shí)器a、b,業(yè)務(wù)模塊2的定時(shí)器c,業(yè)務(wù)模塊3的定時(shí)器d、e、f,六個(gè)定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3 (timeout_interval)分別為3,1,1,4,2,1個(gè)timerTick,則六個(gè)定時(shí)器實(shí)例對(duì)象在第二定時(shí)器數(shù)組B[]中的索引時(shí)刻[gTimerJiffies+timeout_interval]分別為4,3,4,8,7,7,此時(shí)【具體實(shí)施方式】第一定時(shí)器數(shù)組A[]和第二定時(shí)器數(shù)組B []中定時(shí)器實(shí)例對(duì)象存儲(chǔ)示意圖如圖3和圖4。
[0059]S5,根據(jù)所述索引時(shí)刻將與所述索引時(shí)刻相對(duì)應(yīng)的定時(shí)器實(shí)例對(duì)象添加至所述第二定時(shí)器數(shù)組B []的鏈表數(shù)組元素中。
[0060]S6,判斷所述索引時(shí)刻是否小于等于第一總運(yùn)行時(shí)間Tl’ (gTimerJiffies)與所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2 (gAlignmentTime)之和,若是,則執(zhí)行步驟S7,若否,執(zhí)行步驟S10,即記錄第二總運(yùn)行時(shí)間Tl”。
[0061]S7,判斷所述第二定時(shí)器數(shù)組的鏈表數(shù)組元素中是否存在定時(shí)器實(shí)例對(duì)象,若是,則執(zhí)行步驟S8,若否,則返回步驟S2,重新運(yùn)行所述軟件定時(shí)器的優(yōu)化方法。
[0062]S8,若所述鏈表數(shù)組元素中存在定時(shí)器實(shí)例對(duì)象,則在所述第二定時(shí)器數(shù)組中循環(huán)執(zhí)行所述鏈表數(shù)組元素的定時(shí)器實(shí)例對(duì)象的定時(shí)器超時(shí)回調(diào)處理函數(shù),之后根據(jù)所述定時(shí)器實(shí)例對(duì)象中的第二節(jié)點(diǎn)指針在所述第二定時(shí)器數(shù)組中刪除該定時(shí)器實(shí)例對(duì)象,同時(shí)本步驟還包括根據(jù)所述定時(shí)器實(shí)例對(duì)象中的第一節(jié)點(diǎn)指針在所述第一定時(shí)器數(shù)組中刪除所述定時(shí)器實(shí)例對(duì)象。
[0063]S9,判斷該定時(shí)器實(shí)例對(duì)象下是否還存在其他定時(shí)器實(shí)例對(duì)象,在本實(shí)施例中,所述其他定時(shí)器實(shí)例對(duì)象是指執(zhí)行完超時(shí)回調(diào)處理函數(shù)后定時(shí)器實(shí)例對(duì)象下的另一定時(shí)器實(shí)例對(duì)象,若是,則執(zhí)行超時(shí)回調(diào)處理函數(shù)的步驟,及返回步驟S8,若否,則執(zhí)行步驟S10,即記錄第二總運(yùn)行時(shí)間Tl”。
[0064]SI I,判斷第二總運(yùn)行時(shí)間Tl”與記錄第一總運(yùn)行時(shí)間Tl’之差是否大于所述時(shí)間片timerTick,第二總運(yùn)行時(shí)間Tl”與記錄第一總運(yùn)行時(shí)間Tl’之差為計(jì)數(shù)所有定時(shí)器實(shí)例對(duì)象的執(zhí)行的耗時(shí)時(shí)間,若否,則執(zhí)行步驟S12,及將所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為零,若是,則執(zhí)行步驟S13,即將所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為Τ1”-Τ1‘。在本實(shí)施例中,每個(gè)時(shí)刻只需訪問處理當(dāng)前時(shí)刻已超時(shí)的定時(shí)器實(shí)例對(duì)象,不需要方法所有的定時(shí)器實(shí)例對(duì)象,極大地減少了 CPU的占用率,同時(shí)對(duì)定時(shí)器實(shí)例對(duì)象的超時(shí)回調(diào)處理進(jìn)行了耗時(shí)計(jì)算,對(duì)定時(shí)器實(shí)例對(duì)象進(jìn)行了時(shí)間偏移補(bǔ)償,提高了定時(shí)器的定時(shí)時(shí)間的準(zhǔn)確度。
[0065]S14,繼續(xù)下一次循環(huán),令總運(yùn)行時(shí)間Tl為零的所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所 需時(shí)間Τ2或?yàn)門l”-Tl’的所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間Τ2以對(duì)定時(shí)器進(jìn)行補(bǔ)m
\-ΖΧ ο
[0066]本實(shí)施例所提供的軟件定時(shí)器的優(yōu)化方法由于此設(shè)計(jì)按照模塊劃分定時(shí)器實(shí)例對(duì)象,提高了定時(shí)器實(shí)例對(duì)象的操作效率。對(duì)定時(shí)器按照超時(shí)時(shí)間添加到定時(shí)器超時(shí)檢測(cè)處理數(shù)組中,每個(gè)時(shí)刻只會(huì)去訪問處理當(dāng)前時(shí)刻已超時(shí)的定時(shí)器實(shí)例對(duì)象,不需訪問所有定時(shí)器實(shí)例對(duì)象,極大的減少的CPU的占用率,同時(shí)對(duì)定時(shí)器對(duì)象的超時(shí)回調(diào)處理進(jìn)行了耗時(shí)計(jì)算,對(duì)定時(shí)器進(jìn)行了時(shí)間漂移補(bǔ)償,提高了定時(shí)器的定時(shí)準(zhǔn)確度。
[0067]實(shí)施例二
[0068]本實(shí)施例提供一種軟件定時(shí)器的優(yōu)化系統(tǒng)1,應(yīng)用于若干個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊中,每一個(gè)業(yè)務(wù)模塊包括多個(gè)定時(shí)器實(shí)例對(duì)象,請(qǐng)參閱圖5,顯示為軟件定時(shí)器的優(yōu)化系統(tǒng)的原理結(jié)構(gòu)圖,所述軟件定時(shí)器的優(yōu)化系統(tǒng)包括:第一創(chuàng)建模塊11、管理模塊12、第二創(chuàng)建模塊13、處理模塊14、第一判斷模塊15、第二判斷模塊16、第三判斷模塊17、第四判斷模塊18、及賦值模塊19。
[0069]所述第一創(chuàng)建模塊11用于為每一個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊生成定時(shí)器鏈表索引號(hào),創(chuàng)建包括與所述業(yè)務(wù)模塊數(shù)量一致的鏈表數(shù)組元素的第一定時(shí)器數(shù)組A[];定義總運(yùn)行時(shí)間,記錄為Tl和每個(gè)時(shí)刻所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間,記錄為T2,初始化所述Tl和和所述T2為零;所述定時(shí)器實(shí)例對(duì)象包括定時(shí)器超時(shí)回調(diào)處理函數(shù);且所述第一創(chuàng)建模塊還用于等待一時(shí)間片后,為所述總運(yùn)行時(shí)間Tl自動(dòng)加1,記錄第一總運(yùn)行時(shí)間Tl’。所述定時(shí)器實(shí)例對(duì)象包括記錄存在于所述第一定時(shí)器數(shù)組中鏈表數(shù)組元素的節(jié)點(diǎn)的第一節(jié)點(diǎn)指針、記錄存在于所述第二定時(shí)器數(shù)組中鏈表數(shù)組元素的節(jié)點(diǎn)的第二節(jié)點(diǎn)指針、定時(shí)器超時(shí)回調(diào)處理函數(shù)、及定時(shí)器超時(shí)回調(diào)處理參數(shù)。所述定時(shí)器實(shí)例對(duì)象中的第一節(jié)點(diǎn)指針記錄所述第一定時(shí)器數(shù)組中所述鏈表數(shù)組元素的首地址。所述定時(shí)器實(shí)例對(duì)象中的第二節(jié)點(diǎn)指針記錄所述第二定時(shí)器數(shù)組中鏈表數(shù)組元素的首地址。
[0070]與所述第一創(chuàng)建模塊11連接的所述管理模塊12用于開啟所述業(yè)務(wù)模塊中的定時(shí)器實(shí)例對(duì)象,根據(jù)所述定時(shí)器鏈表索引號(hào)將所述業(yè)務(wù)模塊包括的多個(gè)定時(shí)器實(shí)例對(duì)象添加至所述第一定時(shí)器數(shù)組的鏈表數(shù)組元素中。
[0071]與所述管理模塊12連接第二創(chuàng)建模塊13用于創(chuàng)建第二定時(shí)器數(shù)組,在所述第二定時(shí)器數(shù)組檢測(cè)所述定時(shí)器實(shí)例對(duì)象的超時(shí),記錄該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3,生成由該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3與第一總運(yùn)行時(shí)間Tl’之和組成的索引時(shí)刻。
[0072]當(dāng)所述第二定時(shí)器數(shù)組創(chuàng)建后,所述管理模塊12還用于根據(jù)所述索引時(shí)刻將與所述索引時(shí)刻相對(duì)應(yīng)的定時(shí)器實(shí)例對(duì)象添加至所述第二定時(shí)器數(shù)組的鏈表數(shù)組元素中。
[0073]分別與所述管理模塊12和所述第二創(chuàng)建模塊13連接的處理模塊14用于在所述第二定時(shí)器數(shù)組中循環(huán)執(zhí)行所述鏈表數(shù)組元素下的定時(shí)器實(shí)例對(duì)象的超時(shí)回調(diào)處理函數(shù),執(zhí)行完后根據(jù)所述定時(shí)器實(shí)例對(duì)象中的第二節(jié)點(diǎn)指針在所述第二定時(shí)器數(shù)組中刪除該定時(shí)器實(shí)例對(duì)象,繼續(xù)執(zhí)行該定時(shí)器實(shí)例對(duì)象下的另一定時(shí)器實(shí)例對(duì)象,直至執(zhí)行完畢該鏈表數(shù)組元素下所有定時(shí)器實(shí)例對(duì)象。在本實(shí)施例中,所述處理模塊14同時(shí)還用于根據(jù)所述定時(shí)器實(shí)例對(duì)象中的第一節(jié)點(diǎn)指針在所述第一定時(shí)器數(shù)組中刪除所述定時(shí)器實(shí)例對(duì)象。
[0074]與所述處理模塊14連接的第一判斷模塊15用于判斷所述索引時(shí)刻是否小于等于第一總運(yùn)行時(shí)間Tl’與所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2之和,若是,則調(diào)用所述第二判斷模塊16,若否, 則調(diào)用所述第二創(chuàng)建模塊13記錄第二總運(yùn)行時(shí)間Tl” ;
[0075]與所述第一判斷模塊15連接的所述第二判斷模塊16用于判斷所述第二定時(shí)器數(shù)組的鏈表數(shù)組元素中是否存在定時(shí)器實(shí)例對(duì)象,若是,調(diào)用所述處理模塊14,若否,則重新運(yùn)行所述軟件定時(shí)器的優(yōu)化系統(tǒng)I。所述處理模塊14用于若所述鏈表數(shù)組元素中存在定時(shí)器實(shí)例對(duì)象,則在所述第二定時(shí)器數(shù)組中循環(huán)執(zhí)行所述鏈表數(shù)組元素的定時(shí)器實(shí)例對(duì)象的定時(shí)器超時(shí)回調(diào)處理函數(shù),之后根據(jù)第二節(jié)點(diǎn)指針刪除定時(shí)器實(shí)例對(duì)象,同時(shí)根據(jù)第一節(jié)點(diǎn)指針在第一定時(shí)器數(shù)組中刪除定時(shí)器實(shí)例對(duì)象。
[0076]與所述第二判斷模塊16連接的所述第三判斷模塊17用于判斷該定時(shí)器實(shí)例對(duì)象下是否還存在其他定時(shí)器實(shí)例對(duì)象,在本實(shí)施例中,所述其他定時(shí)器實(shí)例對(duì)象是指執(zhí)行完超時(shí)回調(diào)處理函數(shù)后定時(shí)器實(shí)例對(duì)象下的另一定時(shí)器實(shí)例對(duì)象,若是,則繼續(xù)調(diào)用所述處理模塊14,執(zhí)行超時(shí)回調(diào)處理函數(shù)的步驟,之后根據(jù)第二節(jié)點(diǎn)指針刪除其他定時(shí)器實(shí)例對(duì)象,同時(shí)根據(jù)第一節(jié)點(diǎn)指針在第一定時(shí)器數(shù)組中刪除其他定時(shí)器實(shí)例對(duì)象,若否,則調(diào)用所述第二創(chuàng)建模塊13記錄第二總運(yùn)行時(shí)間Tl”。
[0077]與所述第三判斷模塊17連接的所述第四判斷模塊18用于判斷第二總運(yùn)行時(shí)間Tl”與記錄第一總運(yùn)行時(shí)間Tl’之差是否大于所述時(shí)間片timerTick,若否,則調(diào)用所述賦值模塊19,將所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為零,若是,也將調(diào)用所述賦值模塊19,為所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為Tl”-Tl’。最后,所述當(dāng)所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為零或?yàn)棣?”-ΤT時(shí),所述賦值模塊令總運(yùn)行時(shí)間Tl為零的所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間Τ2或?yàn)棣?”-ΤT的所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間Τ2以對(duì)定時(shí)器進(jìn)行補(bǔ)償。[0078]本發(fā)明所述的軟件定時(shí)器的優(yōu)化方法及系統(tǒng)由于此設(shè)計(jì)按照模塊劃分定時(shí)器實(shí)例對(duì)象,提高了定時(shí)器實(shí)例對(duì)象的操作效率。對(duì)定時(shí)器按照超時(shí)時(shí)間添加到定時(shí)器超時(shí)檢測(cè)處理數(shù)組中,每個(gè)時(shí)刻只會(huì)去訪問處理當(dāng)前時(shí)刻已超時(shí)的定時(shí)器實(shí)例對(duì)象,不需訪問所有定時(shí)器實(shí)例對(duì)象,極大的減少的CPU的占用率,同時(shí)對(duì)定時(shí)器對(duì)象的超時(shí)回調(diào)處理進(jìn)行了耗時(shí)計(jì)算,對(duì)定時(shí)器進(jìn)行了時(shí)間漂移補(bǔ)償,提高了定時(shí)器的定時(shí)準(zhǔn)確度。
[0079]所以,本發(fā)明有效克服了現(xiàn)有技術(shù)中的種種缺點(diǎn)而具高度產(chǎn)業(yè)利用價(jià)值。
[0080]上述實(shí)施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟悉此技術(shù)的人士皆可在不違背本發(fā)明的精神及范疇下,對(duì)上述實(shí)施例進(jìn)行修飾或改變。因此,舉凡所屬【技術(shù)領(lǐng)域】中具有通常知識(shí)者在未脫離本發(fā)明所揭示的精神與技術(shù)思想下所完成的一切等效修飾或改變,仍應(yīng)由本發(fā)明的權(quán)利要求所涵蓋。
【權(quán)利要求】
1.一種軟件定時(shí)器的優(yōu)化方法,應(yīng)用于若干個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊中,每一個(gè)業(yè)務(wù)模塊包括多個(gè)定時(shí)器實(shí)例對(duì)象,其特征在于,包括: 步驟一,為每一個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊生成定時(shí)器鏈表索引號(hào),創(chuàng)建包括與所述業(yè)務(wù)模塊數(shù)量一致的鏈表數(shù)組元素的第一定時(shí)器數(shù)組;定義總運(yùn)行時(shí)間,記錄為Tl和每個(gè)時(shí)刻所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間,記錄為T2,初始化所述Tl和所述T2為零;所述定時(shí)器實(shí)例對(duì)象包括定時(shí)器超時(shí)回調(diào)處理函數(shù); 步驟二,等待一時(shí)間片后,所述總運(yùn)行時(shí)間Tl自動(dòng)加1,記錄第一總運(yùn)行時(shí)間Tl’ ;步驟三,開啟所述業(yè)務(wù)模塊中的定時(shí)器實(shí)例對(duì)象,根據(jù)所述定時(shí)器鏈表索引號(hào)將所述業(yè)務(wù)模塊包括的多個(gè)定時(shí)器實(shí)例對(duì)象添加至所述第一定時(shí)器數(shù)組的鏈表數(shù)組元素中;步驟四,創(chuàng)建第二定時(shí)器數(shù)組,在所述第二定時(shí)器數(shù)組檢測(cè)所述定時(shí)器實(shí)例對(duì)象的超時(shí),記錄該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3,生成由該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3與第一總運(yùn)行時(shí)間Tl’之和組成的索引時(shí)刻; 步驟五,根據(jù)所述索引時(shí)刻將與所述索引時(shí)刻相對(duì)應(yīng)的定時(shí)器實(shí)例對(duì)象添加至所述第二定時(shí)器數(shù)組的鏈表數(shù)組元素中; 步驟六,在所述第二定時(shí)器數(shù)組中循環(huán)執(zhí)行所述鏈表數(shù)組元素下的定時(shí)器實(shí)例對(duì)象的超時(shí)回調(diào)處理函數(shù),執(zhí)行完后刪除該定時(shí)器實(shí)例對(duì)象,繼續(xù)執(zhí)行該定時(shí)器實(shí)例對(duì)象下的其他定時(shí)器實(shí)例對(duì)象,直至執(zhí)行完畢該鏈表數(shù)組元素下所有定時(shí)器實(shí)例對(duì)象,繼續(xù)下一次循環(huán)。
2.根據(jù)權(quán)利要求1所述的軟件定時(shí)器的優(yōu)化方法,其特征在于:所述軟件定時(shí)器的優(yōu)化方法還包括: 判斷所述索引時(shí)刻是否小于等于第一總運(yùn)行時(shí)間Tl’與所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2之和,若是,則執(zhí)行下一步驟,若否,則記錄第二總運(yùn)行時(shí)間Tl” ; 判斷所述第二定時(shí)器數(shù)組的鏈表數(shù)組元素中是否存在定時(shí)器實(shí)例對(duì)象,若是,則執(zhí)行下一步驟,若否,則返回步驟二,重新運(yùn)行所述軟件定時(shí)器的優(yōu)化方法; 若所述鏈表數(shù)組元素中存在定時(shí)器實(shí)例對(duì)象,則在所述第二定時(shí)器數(shù)組中循環(huán)執(zhí)行所述鏈表數(shù)組元素的定時(shí)器實(shí)例對(duì)象的定時(shí)器超時(shí)回調(diào)處理函數(shù),之后刪除該定時(shí)器實(shí)例對(duì)象。
3.根據(jù)權(quán)利要求2所述的軟件定時(shí)器的優(yōu)化方法,其特征在于:所述軟件定時(shí)器的優(yōu)化方法還包括: 判斷該定時(shí)器實(shí)例對(duì)象下是否還存在其他定時(shí)器實(shí)例對(duì)象,若是,則執(zhí)行超時(shí)回調(diào)處理函數(shù)的步驟,若否,則記錄第二總運(yùn)行時(shí)間Tl” ; 判斷第二總運(yùn)行時(shí)間Tl”與記錄第一總運(yùn)行時(shí)間Tl’之差是否大于所述時(shí)間片,若否,則表示為所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為零,若是,則表示為所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為為Tl” -Tl’,繼續(xù)下一次循環(huán)。
4.根據(jù)權(quán)利要求1所述的軟件定時(shí)器的優(yōu)化方法,其特征在于:所述定時(shí)器實(shí)例對(duì)象還包括記錄存在于所述第一定時(shí)器數(shù)組中鏈表數(shù)組元素的節(jié)點(diǎn)的第一節(jié)點(diǎn)指針、記錄存在于所述第二定時(shí)器數(shù)組中鏈表數(shù)組元素的節(jié)點(diǎn)的第二節(jié)點(diǎn)指針、及定時(shí)器超時(shí)回調(diào)處理參數(shù)。
5.根據(jù)權(quán)利要求4所述的軟件定時(shí)器的優(yōu)化方法,其特征在于:所述定時(shí)器實(shí)例對(duì)象中的第一節(jié)點(diǎn)指針記錄所述第一定時(shí)器數(shù)組中所述鏈表數(shù)組元素的首地址。所述定時(shí)器實(shí)例對(duì)象中的第二節(jié)點(diǎn)指針記錄所述第二定時(shí)器數(shù)組中鏈表數(shù)組元素的首地址。
6.根據(jù)權(quán)利要求5所述的軟件定時(shí)器的優(yōu)化方法,其特征在于:所述步驟六還包括根據(jù)所述定時(shí)器實(shí)例對(duì)象中的第一節(jié)點(diǎn)指針在所述第一定時(shí)器數(shù)組中刪除所述定時(shí)器實(shí)例對(duì)象。
7.根據(jù)權(quán)利要求1所述的軟件定時(shí)器的優(yōu)化方法,其特征在于:所述第一定時(shí)器數(shù)組為定時(shí)器管理鏈表數(shù)組,所述第二定時(shí)器數(shù)組為定時(shí)器超時(shí)檢測(cè)處理鏈表數(shù)組。
8.一種軟件定時(shí)器的優(yōu)化系統(tǒng),應(yīng)用于若干個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊中,每一個(gè)業(yè)務(wù)模塊包括多個(gè)定時(shí)器實(shí)例對(duì)象,其特征在于,包括: 第一創(chuàng)建模塊,用于為每一個(gè)需要使用定時(shí)器的業(yè)務(wù)模塊生成定時(shí)器鏈表索引號(hào),創(chuàng)建包括與所述業(yè)務(wù)模塊數(shù)量一致的鏈表數(shù)組元素的第一定時(shí)器數(shù)組;定義總運(yùn)行時(shí)間,記錄為Tl和每個(gè)時(shí)刻所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間,記錄為T2,初始化所述Tl和和所述T2為零;所述定時(shí)器實(shí)例對(duì)象包括定時(shí)器超時(shí)回調(diào)處理函數(shù);且所述第一創(chuàng)建模塊還用于等待一時(shí)間片后,為所述總運(yùn)行時(shí)間Tl自動(dòng)加1,記錄第一總運(yùn)行時(shí)間Tl’ ; 管理模塊,用于開啟所述業(yè)務(wù)模塊中的定時(shí)器實(shí)例對(duì)象,根據(jù)所述定時(shí)器鏈表索引號(hào)將所述業(yè)務(wù)模塊包括的多個(gè)定時(shí)器實(shí)例對(duì)象添加至所述第一定時(shí)器數(shù)組的鏈表數(shù)組元素中; 第二創(chuàng)建模塊,用于創(chuàng)建第二定時(shí)器數(shù)組,在所述第二定時(shí)器數(shù)組檢測(cè)所述定時(shí)器實(shí)例對(duì)象的超時(shí),記 錄該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3,生成由該定時(shí)器實(shí)例對(duì)象的超時(shí)時(shí)間T3與第一總運(yùn)行時(shí)間Tl’之和組成的索引時(shí)刻; 所述管理模塊還用于根據(jù)所述索引時(shí)刻將與所述索引時(shí)刻相對(duì)應(yīng)的定時(shí)器實(shí)例對(duì)象添加至所述第二定時(shí)器數(shù)組的鏈表數(shù)組元素中; 處理模塊,用于在所述第二定時(shí)器數(shù)組中循環(huán)執(zhí)行所述鏈表數(shù)組元素下的定時(shí)器實(shí)例對(duì)象的超時(shí)回調(diào)處理函數(shù),執(zhí)行完后刪除該定時(shí)器實(shí)例對(duì)象,繼續(xù)執(zhí)行該定時(shí)器實(shí)例對(duì)象下的其他定時(shí)器實(shí)例對(duì)象,直至執(zhí)行完畢該鏈表數(shù)組元素下所有定時(shí)器實(shí)例對(duì)象。
9.根據(jù)權(quán)利要求8所述的軟件定時(shí)器的優(yōu)化系統(tǒng),其特征在于:所述軟件定時(shí)器的優(yōu)化系統(tǒng)還包括:第一判斷模塊和第二判斷模塊; 其中,所述第一判斷模塊用于判斷所述索引時(shí)刻是否小于等于第一總運(yùn)行時(shí)間Tl’與所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2之和,若是,則調(diào)用所述第二判斷模塊,若否,則調(diào)用所述第二創(chuàng)建模塊記錄第二總運(yùn)行時(shí)間Tl” ; 所述第二判斷模塊用于判斷所述第二定時(shí)器數(shù)組的鏈表數(shù)組元素中是否存在定時(shí)器實(shí)例對(duì)象,若是,調(diào)用所述處理模塊,若否,則重新運(yùn)行所述軟件定時(shí)器的優(yōu)化系統(tǒng); 所述處理模塊用于若所述鏈表數(shù)組元素中存在其他定時(shí)器實(shí)例對(duì)象,則在所述第二定時(shí)器數(shù)組中循環(huán)執(zhí)行所述鏈表數(shù)組元素的定時(shí)器實(shí)例對(duì)象的定時(shí)器超時(shí)回調(diào)處理函數(shù),之后刪除該定時(shí)器實(shí)例對(duì)象。
10.根據(jù)權(quán)利要求8所述的軟件定時(shí)器的優(yōu)化系統(tǒng),其特征在于:所述軟件定時(shí)器的優(yōu)化系統(tǒng)還包括:第三判斷模塊和第四判斷模塊; 其中,所述第三判斷模塊用于判斷該定時(shí)器實(shí)例對(duì)象下是否還存在其他定時(shí)器實(shí)例對(duì)象,若是,則繼續(xù)調(diào)用所述處理模塊,執(zhí)行超時(shí)回調(diào)處理函數(shù)的步驟,若否,則調(diào)用所述第二創(chuàng)建模塊記錄第二總運(yùn)行時(shí)間Tl” ; 所述第四判斷模塊用于判斷第二總運(yùn)行時(shí)間Tl”與記錄第一總運(yùn)行時(shí)間Tl’之差是否大于所述時(shí)間片,若否,則表示為所有定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為零,若是,則表示為 所有 定時(shí)器實(shí)例對(duì)象超時(shí)處理所需時(shí)間T2賦值為Τ1”-Τ1',繼續(xù)下一次循環(huán)。
【文檔編號(hào)】G06F9/44GK104035786SQ201410309635
【公開日】2014年9月10日 申請(qǐng)日期:2014年7月1日 優(yōu)先權(quán)日:2014年7月1日
【發(fā)明者】李梅勇, 原曦佳, 鄧懲 申請(qǐng)人:上海斐訊數(shù)據(jù)通信技術(shù)有限公司