欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種消息驅(qū)動(dòng)系統(tǒng)中無(wú)效超時(shí)消息的檢測(cè)方法與流程

文檔序號(hào):12363091閱讀:275來(lái)源:國(guó)知局
一種消息驅(qū)動(dòng)系統(tǒng)中無(wú)效超時(shí)消息的檢測(cè)方法與流程

本發(fā)明涉及針對(duì)嵌入式消息驅(qū)動(dòng)的系統(tǒng)中,消息定時(shí)器發(fā)出的,無(wú)效的超時(shí)消息的檢測(cè)方法,具體包括引入計(jì)數(shù)器來(lái)表示超時(shí)消息的有效性,以及在消息定時(shí)器狀態(tài)改變時(shí),在超時(shí)消息分配或釋放時(shí),維護(hù)調(diào)整這些計(jì)數(shù)。



背景技術(shù):

在嵌入式實(shí)時(shí)系統(tǒng)中,消息驅(qū)動(dòng)是一種常見(jiàn)的,高性能的軟件架構(gòu)方式。不同的,異步運(yùn)行的任務(wù),綁定并監(jiān)聽(tīng)各自的消息隊(duì)列,當(dāng)且僅當(dāng)其消息隊(duì)列上有消息,即其他的任務(wù)給它發(fā)送了消息時(shí),它從隊(duì)列中取出消息,并根據(jù)消息類(lèi)型,負(fù)載等信息,決定下一步的執(zhí)行流程。而在某些特定的應(yīng)用中,經(jīng)常會(huì)有這樣的需求,即任務(wù)S希望在一段時(shí)間T0后,給任務(wù)R發(fā)送消息,將任務(wù)R喚醒/調(diào)度起來(lái)。消息定時(shí)器就是應(yīng)這種需求而設(shè)計(jì)出來(lái)的,它可以延遲發(fā)送消息,其創(chuàng)建,啟動(dòng),修改,停止和刪除動(dòng)作,都跟普通的定時(shí)器并無(wú)差別,唯獨(dú)它超時(shí)后被定制為發(fā)送一個(gè)用戶(hù)指定消息,此消息就是超時(shí)消息。

由于實(shí)時(shí)系統(tǒng)包含不同優(yōu)先級(jí)的多個(gè)任務(wù),并且高優(yōu)先級(jí)任務(wù)往往會(huì)搶占低優(yōu)先級(jí)任務(wù)的執(zhí)行,造成了任務(wù)運(yùn)行的不確定性;這可能導(dǎo)致超時(shí)消息的接收任務(wù)R,在還沒(méi)來(lái)得及處理(完)任務(wù)S通過(guò)消息定時(shí)器發(fā)送的超時(shí)消息前,消息定時(shí)器就被所有者任務(wù)S停止或者刪除了;當(dāng)任務(wù)R重新拿到CPU資源并繼續(xù)處理超時(shí)消息時(shí),就會(huì)認(rèn)為消息定時(shí)器已經(jīng)被停止或者刪除了,為什么還會(huì)發(fā)送超時(shí)消息。更嚴(yán)重的情況是,這些無(wú)效的超時(shí)消息在任務(wù)S認(rèn)為,其實(shí)是不需要任務(wù)R去處理的,一旦任務(wù)R處理了,就會(huì)出現(xiàn)系統(tǒng)空轉(zhuǎn)或者流程出錯(cuò),極大地浪費(fèi)系統(tǒng)資源以及影響系統(tǒng)的正確性,穩(wěn)定性。

特別地,對(duì)于周期性超時(shí)的消息定時(shí)器,由于它每次超時(shí)發(fā)送的是同樣內(nèi)容的消息,為了更高的效率,需要一種方法來(lái)減免重復(fù)分配和釋放超時(shí)消息帶來(lái)的負(fù)擔(dān)。

于現(xiàn)有技術(shù)中,申請(qǐng)?zhí)枮?00710124849.X的發(fā)明專(zhuān)利公開(kāi)了一種系統(tǒng)進(jìn)程調(diào)度下無(wú)效超時(shí)消息的方法及消息發(fā)送方法,其應(yīng)用于嵌入式操作系統(tǒng)的定時(shí)器模塊上,首先、在定時(shí)器控制結(jié)構(gòu)中添加一指針變量;然后、當(dāng)系統(tǒng)定時(shí)器模塊向進(jìn)程發(fā)送定時(shí)器超時(shí)消息時(shí),將所述指針變量指向定時(shí)器超時(shí)消息。上述方案能夠提供追殺定時(shí)器超時(shí)消息的功能,但一個(gè)定時(shí)器僅對(duì)應(yīng)一個(gè)超時(shí)消息,當(dāng)同時(shí)出現(xiàn)多個(gè)超時(shí)消息時(shí),沒(méi)有對(duì)應(yīng)的處理方式,具有一定局限性。

鑒于上述原因,本發(fā)明提供一種消息驅(qū)動(dòng)系統(tǒng)中無(wú)效超時(shí)消息的檢測(cè)方法,以解決上述問(wèn)題。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明提供一種消息驅(qū)動(dòng)系統(tǒng)中無(wú)效超時(shí)消息的檢測(cè)方法,包括以下步驟:

S1、在超時(shí)消息中插入超時(shí)消息控制塊,其中所述超時(shí)消息控制塊包括標(biāo)志字段、引用字段及有效字段;

S2、接收任務(wù)從消息隊(duì)列取出所述超時(shí)消息,并判斷所述超時(shí)消息中,是否有效字段大于0且所述有效字段等于引用字段減1;

S3、若是,所述接收任務(wù)確定所述超時(shí)消息為有效消息,否則為無(wú)效消息并將其丟棄。

優(yōu)選的,步驟S1還包括,創(chuàng)建消息定時(shí)器,并初始化超時(shí)消息控制塊中引用字段為1,有效字段為0。

優(yōu)選的,步驟S1還包括,發(fā)送超時(shí)消息,并將所述引用字段及有效字段分別加1。

優(yōu)選的,停止消息定時(shí)器時(shí),有效字段清零,且引用字段維持不變。

優(yōu)選的,所述超時(shí)消息控制塊位于所述超時(shí)消息的消息頭之后。

優(yōu)選的,當(dāng)超時(shí)消息被刪除時(shí),引用字段減1,且有效字段維持不變。

優(yōu)選的,在步驟S3中,所述接收任務(wù)用完一個(gè)有效超時(shí)消息后,引用字段及有效字段分別減1;丟棄一個(gè)無(wú)效超時(shí)消息時(shí),所述引用字段減1且有效字段維持不變。

優(yōu)選的,引用字段及有效字段的更新均在鎖的保護(hù)下進(jìn)行。

根據(jù)本發(fā)明提供的消息驅(qū)動(dòng)系統(tǒng)中無(wú)效超時(shí)消息的檢測(cè)方法,在超時(shí)消息中插入超時(shí)消息控制塊,其中超時(shí)消息控制塊設(shè)置了標(biāo)志字段、引用字段及有效字段。僅在消息內(nèi)部進(jìn)行設(shè)計(jì),應(yīng)用范圍廣泛。接收任務(wù)從消息隊(duì)列取出超時(shí)消息,并判斷所述超時(shí)消息中是否有效字段大于0且所述有效字段等于引用字段減1,若是,所述接收任務(wù)確定所述超時(shí)消息為有效消息,否則為無(wú)效消息并將其丟棄。如此,能夠有效節(jié)約系統(tǒng)資源,并提高了系統(tǒng)穩(wěn)定性。

附圖說(shuō)明

為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1是本發(fā)明較佳實(shí)施例提供的消息驅(qū)動(dòng)系統(tǒng)中無(wú)效超時(shí)消息的檢測(cè)方法流程圖;

圖2是本發(fā)明較佳實(shí)施例提供的超時(shí)消息結(jié)構(gòu)示意圖;

圖3是本發(fā)明較佳實(shí)施例提供的消息隊(duì)列中有4個(gè)超時(shí)消息且均為有效消息的場(chǎng)景示意圖;

圖4是本發(fā)明較佳實(shí)施例提供的消息隊(duì)列中有3個(gè)超時(shí)消息且均為有效消息的場(chǎng)景示意圖;

圖5是本發(fā)明較佳實(shí)施例提供的消息隊(duì)列中有3個(gè)超時(shí)消息且均為無(wú)效消息的場(chǎng)景示意圖;

圖6是本發(fā)明較佳實(shí)施例提供的消息隊(duì)列中有2個(gè)超時(shí)消息且均為無(wú)效消息的場(chǎng)景示意圖;

圖7是本發(fā)明較佳實(shí)施例提供的消息隊(duì)列中有3個(gè)超時(shí)消息且前兩個(gè)是無(wú)效消息后一個(gè)是有效消息的場(chǎng)景示意圖;

圖8是本發(fā)明較佳實(shí)施例提供的消息隊(duì)列中有2個(gè)超時(shí)消息且前一個(gè)是無(wú)效消息后一個(gè)是有效消息的場(chǎng)景示意圖;

圖9是本發(fā)明較佳實(shí)施例提供的消息隊(duì)列中有1個(gè)有效超時(shí)消息的場(chǎng)景示意圖;

圖10是本發(fā)明較佳實(shí)施例提供的消息隊(duì)列中無(wú)超時(shí)消息且定時(shí)器未被刪除的場(chǎng)景示意圖;

圖11是本發(fā)明較佳實(shí)施例提供的消息隊(duì)列中無(wú)超時(shí)消息定時(shí)器已刪除的場(chǎng)景示意圖。

具體實(shí)施方式

下文中將參考附圖并結(jié)合實(shí)施例來(lái)詳細(xì)說(shuō)明本發(fā)明。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。

圖1是本發(fā)明較佳實(shí)施例提供的消息驅(qū)動(dòng)系統(tǒng)中無(wú)效超時(shí)消息的檢測(cè)方法流程圖。如圖1所示,本發(fā)明較佳實(shí)施例提供的消息驅(qū)動(dòng)系統(tǒng)中無(wú)效超時(shí)消息的檢測(cè)方法包括步驟S1~S3。

步驟S1:在超時(shí)消息中插入超時(shí)消息控制塊,其中所述超時(shí)消息控制塊包括標(biāo)志字段、引用字段及有效字段。

具體而言,一個(gè)消息通常包括通用消息頭和消息負(fù)載,所述的超時(shí)消息控制塊位于通用消息頭和消息負(fù)載中間。參照?qǐng)D2,所述超時(shí)消息控制塊位于超時(shí)消息的通用消息頭之后,通過(guò)它來(lái)判斷一個(gè)消息是否定時(shí)器發(fā)出的超時(shí)消息。

程序編碼如下:

其中:magic表示標(biāo)志字段,用于指示超時(shí)消息控制塊,同時(shí)可用于判斷一個(gè)消息是否超時(shí)消息;refCnt表示引用字段,表示超時(shí)消息的內(nèi)存塊有幾個(gè)持有者,規(guī)則如下:定時(shí)器持有一份,每個(gè)發(fā)送出去的超時(shí)消息也各持有一份(定時(shí)器往消息隊(duì)列中發(fā)送的只是消息內(nèi)存的指針),并約定,一個(gè)超時(shí)消息的內(nèi)存塊,只有當(dāng)refCnt為0時(shí)才會(huì)被釋放并歸還給動(dòng)態(tài)內(nèi)存管理器;validCnt表示有效字段,表示所有發(fā)送出去的超時(shí)消息中,有幾個(gè)是有效的,并且無(wú)效超時(shí)消息總是先于有效的超時(shí)消息被收到(消息隊(duì)列先進(jìn)先出), 并約定一個(gè)定時(shí)器被停止或者刪除后,它之前所有發(fā)出的超時(shí)消息都是無(wú)效的。

參照?qǐng)D3,消息隊(duì)列中有4個(gè)超時(shí)消息,均是有效消息,并且消息內(nèi)存塊refCnt為5。某些情況下,當(dāng)需要同時(shí)更新兩個(gè)計(jì)數(shù)器時(shí),必須保證它們的更新動(dòng)作是在同一個(gè)臨界區(qū)內(nèi)完成的,所以必須由額外的鎖來(lái)保護(hù)它們的更新,不同的系統(tǒng)選擇的鎖可能不一樣,比如信號(hào)量,互斥鎖,或者通過(guò)關(guān)系統(tǒng)中斷實(shí)現(xiàn)等。

創(chuàng)建消息定時(shí)器,并初始化超時(shí)消息控制塊中引用字段為1,表示超時(shí)消息內(nèi)存塊已經(jīng)有一個(gè)持有者,即定時(shí)器;有效字段為0,因?yàn)槎〞r(shí)器還沒(méi)有發(fā)出任何超時(shí)消息。同時(shí)定義標(biāo)志字段magic為T(mén)IMEOUT_MSG_MAGIC。

發(fā)送超時(shí)消息時(shí),將引用字段加1,表示新發(fā)出的超時(shí)消息擁有一份消息內(nèi)存使用權(quán);有效字段加1,表示新發(fā)出的超時(shí)消息可用;標(biāo)志字段維持不變。本更新在鎖的保護(hù)下進(jìn)行,代碼表示為:

TimeOutMsg_OnExpire:

TimeOutMsg_Lock();

refCnt++;

val idCnt++;

TimeOutMsg_UnLock();

本實(shí)施例中,刪除定時(shí)器前,先停止消息定時(shí)器。停止消息定時(shí)器時(shí),有效字段清零,且引用字段維持不變。標(biāo)志字段同樣維持不變。

步驟S2:接收任務(wù)從消息隊(duì)列取出所述超時(shí)消息,并判斷所述超時(shí)消息中,是否有效字段大于0且所述有效字段等于引用字段減1。

具體而言,當(dāng)超時(shí)消息被接收任務(wù)R從消息隊(duì)列取出時(shí),任務(wù)R會(huì)通過(guò)計(jì)數(shù)器判斷其有效性:當(dāng)且僅當(dāng)有效字段(即validCnt)大于0,并且validCnt等于引用字段減1(即refCnt-1)時(shí),該消息是有效的,其余情況均視為無(wú)效,其中(refCnt-1)表示所有暫存在消息隊(duì)列中的超時(shí)消息數(shù)目。

上述判斷必須在鎖的保護(hù)下進(jìn)行,代碼表示為:

TimeOutMsg_checkVal idi ty:

TimeOutMsg_Lock();

if((val idCnt>0)&&(val idCnt==(refCnt-1)))

val id_flag=TRUE;/*Msg is val id*/

TimeOutMsg_UnLock();

當(dāng)超時(shí)消息被刪除時(shí),引用字段減1,表示超時(shí)消息內(nèi)存塊少了一個(gè)所有者(一個(gè)定時(shí)器或者一個(gè)超時(shí)消息,包括有效和無(wú)效的),如果當(dāng)前是最后一個(gè)所有者,須負(fù)責(zé)將消息內(nèi)存塊釋放。有效字段和標(biāo)志字段維持不變。有2種情況需要執(zhí)行該動(dòng)作:消息定時(shí)器被刪除時(shí)(已提前停止定時(shí)器);有效超時(shí)消息用完被釋放,無(wú)效消息被直接丟棄時(shí)。

上述更新在鎖的保護(hù)下進(jìn)行,代碼如下:

TimeOutMsg_onDelete:

TimeOutMsg_Lock();

refCnt--;

refCnt_bk=refCnt;

TimeOutMsg_UnLock();

if(refCnt_bk==0)

{

Free_Msg()

}

步驟S3:若是,所述接收任務(wù)確定所述超時(shí)消息為有效消息,否則為無(wú)效消息并將其丟棄。

具體而言,接收任務(wù)用完一個(gè)有效超時(shí)消息后,引用字段及有效字段分別減1。于此,有效字段減1表示有效消息減少一個(gè),但是需要在當(dāng)前消息是有效的前提下,以防計(jì)數(shù)器值異常,因?yàn)橛锌赡茉谂袛嗤暧行?,到接收任?wù)R用完消息的時(shí)間段內(nèi),定時(shí)器被停止或者刪除,另一種情況是,當(dāng)前消息是無(wú)效消息,接收任務(wù)將無(wú)效超時(shí)消息丟棄,由于程序中調(diào)用了TimeOutMsg_onDelete(),因此引用字段減1且有效字段維持不變。于此,對(duì)于有效字段的變化,解釋為:若超時(shí)消息有效則減1;若超時(shí)消息無(wú)效則維持不變。

上述更新在鎖的保護(hù)下進(jìn)行,代碼如下:

TimeOutMsg_Free:

TimeOutMsg_Lock();

if((val idCnt>0)&&(val idCnt==(refCnt-1)))

val idCnt--;

TimeOutMsg_UnLock();

TimeOutMsg_onDelete();

舉例而言,如圖3,當(dāng)前消息隊(duì)列中有4個(gè)有效的超時(shí)消息:validCnt為4,refCnt為5。接收任務(wù)R從隊(duì)列中取出最前面的消息1,發(fā)現(xiàn)它是有效消息:(validCnt>0&&validCnt==(refCnt-1))為真,接收任務(wù)R根據(jù)消息1類(lèi)型,負(fù)載等信息,處理相應(yīng)流程,結(jié)束后釋放該消息。

參照?qǐng)D4,釋放后validCnt為3,refCnt為4。若定時(shí)器被停止,消息隊(duì)列中所有未處理消息變?yōu)闊o(wú)效超時(shí)消息,參照?qǐng)D5,此時(shí)validCnt為0,refCnt為4。接收任務(wù)R繼續(xù)處理消息隊(duì)列中的消息2,發(fā)現(xiàn)它是一個(gè)無(wú)效消息,因?yàn)?validCnt>0&&validCnt==(refCnt-1))不為真。于是接收任務(wù)R直接丟棄消息2,參照?qǐng)D6,丟棄后validCnt為0,refCnt為3。

參照?qǐng)D7,重新啟動(dòng)定時(shí)器,定時(shí)器超時(shí),并發(fā)出消息5,之后validCnt為1,refCnt為4。參照?qǐng)D8,接收任務(wù)R繼續(xù)處理消息隊(duì)列中的消息3,發(fā)現(xiàn)它是無(wú)效消息,因?yàn)?validCnt>0&&validCnt==(refCnt-1))不為真。丟棄消息3后,validCnt為1,refCnt為3。如圖9,接收任務(wù)R繼續(xù)處理消息隊(duì)列中的消息4,發(fā)現(xiàn)它也是無(wú)效消息,于是丟棄消息4,validCnt為1,refCnt為2。

參照?qǐng)D10,接收任務(wù)R繼續(xù)處理消息隊(duì)列中的消息5,發(fā)現(xiàn)它是有效消息,因?yàn)?validCnt>0&&validCnt==(refCnt-1))為真。于是,根據(jù)消息5類(lèi)型,負(fù)載等信息,處理相應(yīng)流程,結(jié)束后釋放該消息。此時(shí)validCnt為0,refCnt為1。定時(shí)器所有者任務(wù)S刪除定時(shí)器,如圖11,validCnt維持0,refCnt減為0,將超時(shí)消息內(nèi)存塊歸還給動(dòng)態(tài)內(nèi)存管理。

綜上所述,根據(jù)本發(fā)明較佳實(shí)施例提供的消息驅(qū)動(dòng)系統(tǒng)中無(wú)效超時(shí)消息的檢測(cè)方法,在超時(shí)消息中插入超時(shí)消息控制塊,其中超時(shí)消息控制塊設(shè)置了標(biāo)志字段、引用字段及有效字段。在消息內(nèi)部設(shè)置控制塊,適用任何場(chǎng)景。接收任務(wù)從消息隊(duì)列取出超時(shí)消息,并判斷所述超時(shí)消息中是否有效字段大于0且所述有效字段等于引用字段減1,若是,所述接收任務(wù)確定所述超時(shí)消 息為有效消息,否則為無(wú)效消息并將其丟棄。如此,有效節(jié)約了系統(tǒng)資源,并提高系統(tǒng)穩(wěn)定性。

對(duì)所公開(kāi)的實(shí)施例的上述說(shuō)明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專(zhuān)業(yè)技術(shù)人員來(lái)說(shuō)將是顯而易見(jiàn)的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的實(shí)施例,而是要符合與本文所公開(kāi)的原理和新穎特點(diǎn)相一致的最寬的范圍。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
磐石市| 通城县| 安顺市| 蚌埠市| 潮安县| 闵行区| 乌鲁木齐县| 嘉荫县| 永泰县| 淮南市| 台北县| 科技| 军事| 天祝| 工布江达县| 儋州市| 西畴县| 宜章县| 涞源县| 枝江市| 襄垣县| 卢氏县| 肇源县| 偃师市| 交城县| 孝义市| 丽江市| 密云县| 拜城县| 盐边县| 东山县| 洪江市| 桐乡市| 镶黄旗| 略阳县| 缙云县| 宜良县| 金昌市| 鲁甸县| 荔浦县| 抚州市|