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

嵌入式c語(yǔ)言環(huán)境下退出和刪除線程或進(jìn)程的方法、裝置的制作方法

文檔序號(hào):6423217閱讀:253來(lái)源:國(guó)知局
專利名稱:嵌入式c語(yǔ)言環(huán)境下退出和刪除線程或進(jìn)程的方法、裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及C語(yǔ)言技術(shù),尤其涉及嵌入式C語(yǔ)言環(huán)境下異常處理技術(shù)。
背景技術(shù)
異常是指硬件或軟件程序在運(yùn)行時(shí)出現(xiàn)的反常情形。在嵌入式C語(yǔ)言環(huán)境下,傳統(tǒng)的異常處理方法是,當(dāng)發(fā)現(xiàn)異常時(shí),重啟系統(tǒng)。以程序異常為例,可以通過(guò)CPU的異常識(shí)別能力,檢查程序運(yùn)行時(shí)是否出現(xiàn)異常,一旦CPU發(fā)現(xiàn)程序運(yùn)行時(shí)出現(xiàn)異常,則調(diào)用異常處理程序,將包含寄存器、當(dāng)前堆棧、調(diào)用棧在內(nèi)的異常信息保存下來(lái),然后按統(tǒng)一的方式完成處理。即,對(duì)于發(fā)生在任務(wù)中的異常,調(diào)試版本下掛起該任務(wù),在正式版本中重啟嵌入式系統(tǒng),對(duì)于發(fā)生在中斷中的異常,則均以重啟嵌入式系統(tǒng)的方式進(jìn)行處理。發(fā)明人經(jīng)過(guò)仔細(xì)研究現(xiàn)有技術(shù)后發(fā)現(xiàn),隨著軟件復(fù)雜度的日益增加,系統(tǒng)重啟需要更長(zhǎng)的時(shí)間,而產(chǎn)品對(duì)系統(tǒng)的中斷時(shí)間要求越來(lái)越短,甚至不希望系統(tǒng)運(yùn)行時(shí)發(fā)生中斷, 而在嵌入式C語(yǔ)言環(huán)境下,傳統(tǒng)的異常處理方法無(wú)法滿足這樣的需求。

發(fā)明內(nèi)容
本發(fā)明實(shí)施例在于提供一種嵌入式C語(yǔ)言環(huán)境下退出線程或進(jìn)程的方法、裝置以及嵌入式C語(yǔ)言環(huán)境下刪除線程或進(jìn)程的方法、裝置,用以解決刪除或退出的線程或進(jìn)程所拋出的異常仍然占用資源而導(dǎo)致其他線程或進(jìn)程無(wú)法使用這些資源的問(wèn)題。一種嵌入式C語(yǔ)言環(huán)境下退出線程或進(jìn)程的方法,應(yīng)用于線程主動(dòng)退出的場(chǎng)景, 包括獲得線程或進(jìn)程需要退出的信息;檢查需要退出的線程或進(jìn)程所拋出的異常是否仍然占用資源;如果是,則釋放所述占用的資源;退出所述線程或進(jìn)程。—種嵌入式C語(yǔ)言環(huán)境下退出線程或進(jìn)程的裝置,包括信息獲得單元,用于獲得線程或進(jìn)程需要退出的信息;資源檢查單元,用于在所述信息獲得單元獲得線程或進(jìn)程需要退出的信息后,檢查需要退出的線程或進(jìn)程所拋出的異常是否仍然占用資源;資源釋放單元,用于在所述資源檢查單元檢查出需要退出的線程或進(jìn)程所拋出的異常仍然占用資源,釋放所述占用的資源;退出單元,用于在所述資源釋放單元釋放所述占用的資源后,退出所述線程或進(jìn)程。一種嵌入式C語(yǔ)言環(huán)境下刪除線程或進(jìn)程的方法,應(yīng)用于當(dāng)前線程或進(jìn)程被其他線程或進(jìn)程刪除的場(chǎng)景,包括確定需要?jiǎng)h除的線程或進(jìn)程;檢查需要?jiǎng)h除的線程或進(jìn)程所拋出的異常是否仍然占用資源;如果是,則釋放所述占用的資源;刪除所述線程或進(jìn)程。一種嵌入式C語(yǔ)言環(huán)境下刪除線程或進(jìn)程的裝置,包括確定單元,用于確定需要?jiǎng)h除的線程或進(jìn)程;資源檢查單元,用于在所述確定單元確定需要?jiǎng)h除的線程或進(jìn)程后,檢查需要?jiǎng)h除的線程或進(jìn)程所拋出的異常是否仍然占用資源;資源釋放單元,用于在所述資源檢查單元檢查出需要?jiǎng)h除的線程或進(jìn)程所拋出的異常仍然占用資源,釋放所述占用的資源;線程或進(jìn)程刪除單元,用于在所述資源釋放單元釋放所述占用的資源后,刪除所述線程或進(jìn)程。在本發(fā)明實(shí)施例的嵌入式C語(yǔ)言環(huán)境下退出或刪除線程或進(jìn)程的方法中,無(wú)論是退出或者刪除線程或進(jìn)程,都可以釋放處理線程或進(jìn)程拋出的異常所占用的資源,這樣,當(dāng)其他線程或進(jìn)程需要使用這些資源時(shí),不會(huì)因?yàn)閯h除或退出的線程或進(jìn)程所拋出的異常仍然占用資源而導(dǎo)致其他線程或進(jìn)程無(wú)法使用這些資源。另外,還可以由其他線程刪除所需要?jiǎng)h除的線程,從而可以實(shí)現(xiàn)跨線程刪除線程時(shí)的異常處理。


圖1為本發(fā)明實(shí)施例的嵌入式C語(yǔ)言環(huán)境下異常處理方法的流程圖;圖2為本發(fā)明實(shí)施例的嵌入式C語(yǔ)言環(huán)境下異常處理裝置的結(jié)構(gòu)示意圖;圖3為本發(fā)明實(shí)施例的不同的異常處理程序?qū)?yīng)不同的異常類型的示意圖;圖4為本發(fā)明的嵌入式C語(yǔ)言環(huán)境下異常處理方法一具體實(shí)施例的流程圖;圖5為本發(fā)明實(shí)施例的堆空間存儲(chǔ)異常相關(guān)信息的存儲(chǔ)布局示意圖;圖6為本發(fā)明實(shí)施例的try塊的實(shí)現(xiàn)流程圖;圖7為本發(fā)明實(shí)施例的except塊的實(shí)現(xiàn)流程圖;圖8為本發(fā)明實(shí)施例的捕捉某種特定異常的實(shí)現(xiàn)流程圖;圖9為本發(fā)明實(shí)施例的捕捉處理指定異常的實(shí)現(xiàn)流程圖;圖10為本發(fā)明實(shí)施例的捕捉和處理某一異常區(qū)間內(nèi)的異常的實(shí)現(xiàn)流程圖;圖11為本發(fā)明實(shí)施例的throw塊的實(shí)現(xiàn)流程圖;圖12為本發(fā)明實(shí)施例的異常處理的精細(xì)管理方法的流程圖;圖13為本發(fā)明實(shí)施例的退出線程或進(jìn)程的方法的流程圖;圖14為本發(fā)明實(shí)施例的退出線程或進(jìn)程的裝置的結(jié)構(gòu)示意圖;圖15為本發(fā)明實(shí)施例的刪除線程或進(jìn)程的方法的流程圖;圖16為本發(fā)明實(shí)施例的刪除線程或進(jìn)程的裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。在本發(fā)明實(shí)施例中,對(duì)于C語(yǔ)言環(huán)境下嵌入式系統(tǒng)中的異??梢愿鶕?jù)不同場(chǎng)景編寫(xiě)具有針對(duì)性的異常處理程序,進(jìn)行局部異常處理并嘗試恢復(fù),而不必對(duì)所有異常都作重啟系統(tǒng)處理,在異常處理完畢后繼續(xù)執(zhí)行,從而提高正常流程下的代碼運(yùn)行效率,也簡(jiǎn)化了編程。在C語(yǔ)言環(huán)境下嵌入式系統(tǒng)中異常處理框架(方便理解,可稱為異常處理裝置)的實(shí)現(xiàn)不依賴于編譯器,并且提供給用戶對(duì)異常處理框架進(jìn)行精細(xì)管理的方法。本發(fā)明實(shí)施例中,提供了多種嵌入式C語(yǔ)言環(huán)境下的異常處理方法,其中的一種方法如圖1所示,包括步驟SlOl 監(jiān)控正在運(yùn)行的需要保護(hù)的程序代碼片段;步驟S102 如果所述程序代碼片段出現(xiàn)異常,則拋出所述異常,所述異常包括軟件異常、硬件異常中的至少一種;需要說(shuō)明的是本發(fā)明實(shí)施例的方案不僅適用于軟件異常,還適用于硬件異常; 當(dāng)發(fā)生硬件異常后,可以嘗試恢復(fù)異常,避免重啟系統(tǒng);步驟S103 根據(jù)獲得的所述異常,確定相應(yīng)的異常處理程序,由所述異常處理程序處理所述異常,其中,所述異常處理程序與所述程序代碼片段相互獨(dú)立。為了提供對(duì)異常拋出時(shí)異常處理級(jí)別的精細(xì)管理,在本發(fā)明實(shí)施例中,所述監(jiān)控正在運(yùn)行的需要保護(hù)的程序代碼片段的步驟具體為根據(jù)設(shè)置的處理異常的粒度,監(jiān)控正在運(yùn)行的需要保護(hù)的程序代碼片段;當(dāng)一程序執(zhí)行觸發(fā)異常時(shí),在一種實(shí)現(xiàn)下,當(dāng)正在運(yùn)行的需要保護(hù)的程序代碼片段大于或等于設(shè)置的處理異常的粒度時(shí),則監(jiān)控所述正在運(yùn)行的需要保護(hù)的程序代碼片段;當(dāng)正在運(yùn)行的需要保護(hù)的程序代碼片段小于設(shè)置的處理異常的粒度時(shí),則不監(jiān)控所述正在運(yùn)行的需要保護(hù)的程序代碼片段,也就是說(shuō),就不需要執(zhí)行后續(xù)的步驟;這里的, 所述設(shè)置的處理異常的粒度包括函數(shù)級(jí)別、模塊級(jí)別、部件級(jí)別中的至少一種,其中,所述模塊由多個(gè)函數(shù)組成,所述部件由多個(gè)模塊組成。例如,用戶在調(diào)試階段設(shè)置處理異常的粒度為函數(shù)級(jí)別;當(dāng)代碼穩(wěn)定后,用戶設(shè)置處理異常的粒度為模塊級(jí)別,則代碼在拋出異常時(shí)只識(shí)別模塊級(jí)的異常。在本發(fā)明實(shí)施例中,所述方法進(jìn)一步包括申請(qǐng)用于記錄與異常相關(guān)的信息的存儲(chǔ)空間;則,在所述程序代碼片段出現(xiàn)異常之后,拋出所述異常之前,記錄與異常相關(guān)的信息。應(yīng)當(dāng)理解的是將與異常相關(guān)的信息記錄在申請(qǐng)的存儲(chǔ)空間中。在本發(fā)明實(shí)施例中,所述拋出所述異常的步驟,在一種實(shí)現(xiàn)下,具體為將所述與異常相關(guān)的信息打包后傳遞出去,這里,所述與異常相關(guān)的信息至少包括異常類型標(biāo)識(shí),應(yīng)當(dāng)說(shuō)明的是異常類型標(biāo)識(shí)是用于表示當(dāng)前程序代碼片段出現(xiàn)的異常的類型的信息,形式上可以采用數(shù)字,或者字符,或者數(shù)字和字符的組合,例如采用不同的字符串表示不同異常類型。應(yīng)當(dāng)理解的是本發(fā)明實(shí)施例適用不同類型的異常,在一種實(shí)現(xiàn)下,預(yù)先可以給不同的具體異常類型分配不同的標(biāo)識(shí),例如將異常統(tǒng)一分成a、b、c、d、e、f (小類),并且同時(shí)用另一個(gè)標(biāo)識(shí)區(qū)分哪些是軟件異常,哪些是硬件異常(大類),例如1表示軟件異常;0 表示硬件異常;需要說(shuō)明的是這僅是一個(gè)例子,不用于限制本發(fā)明實(shí)施例方案。在本發(fā)明實(shí)施例中,根據(jù)獲得的所述異常,確定相應(yīng)的異常處理程序,由所述異常處理程序處理所述異常的步驟,在一種實(shí)現(xiàn)下,可以包括獲得傳遞過(guò)來(lái)的與異常相關(guān)的信息,所述與異常相關(guān)的信息中包含異常類型標(biāo)識(shí);確定與所述異常類型標(biāo)識(shí)對(duì)應(yīng)的異常類型所匹配的異常處理程序,由所述異常處理程序處理所述異常。因此,本發(fā)明實(shí)施例針對(duì)不同類型的異常進(jìn)行不同處理,避免現(xiàn)有技術(shù)在遇到異常時(shí),重啟系統(tǒng),導(dǎo)致系統(tǒng)中斷時(shí)間長(zhǎng)的問(wèn)題。確定與所述異常類型標(biāo)識(shí)對(duì)應(yīng)的異常類型所匹配的異常處理程序,由所述異常處理程序處理所述異常的步驟包括當(dāng)所述異常類型標(biāo)識(shí)對(duì)應(yīng)的異常類型與能處理的一種特殊的異常類型匹配時(shí),由與該異常類型匹配的異常處理程序處理該異常;或,當(dāng)所述異常類型標(biāo)識(shí)對(duì)應(yīng)的異常類型與能處理的至少一種異常類型中的一種異常類型匹配時(shí),由與該異常類型匹配的異常處理程序處理該異常,其中,能處理的至少一種異常類型可以是數(shù)組指定的類型,或者是異常區(qū)間內(nèi)的類型;或,當(dāng)存在能處理任何類型異常的異常處理程序時(shí),確定由該匹配任意類型異常的異常處理程序處理所述異常。需要理解的是在一種實(shí)現(xiàn)下,可以由宏確定與所述異常類型標(biāo)識(shí)對(duì)應(yīng)的異常類型所匹配的異常處理程序,這個(gè)宏的形式為EXCEPT,該宏可以帶有異常類型參數(shù),也可以不帶有異常類型參數(shù);在該宏帶有異常類型參數(shù)的情況下,具體匹配過(guò)程可以包括獲得線程異常信息 (即與異常相關(guān)的信息);判斷線程異常信息中的異常類型標(biāo)識(shí)是否與異常類型參數(shù)中的一種匹配;如果匹配,則執(zhí)行相應(yīng)的異常處理程序;如果不匹配,則重新傳遞(拋出)異常 fn息ο在該宏不帶有異常類型參數(shù)的情況下,任何類型的異常都將被相應(yīng)異常處理程序處理,換句話說(shuō),EXCEPT宏一旦獲得異常,就交由與所述程序代碼片段位置最近的一個(gè)異常處理程序去處理異常,也就起到了捕捉所有類型異常的作用。該宏不帶有異常類型參數(shù)時(shí), 包括異常類型標(biāo)識(shí)的異常信息還是傳遞到exc印t塊宏作處理,用戶編寫(xiě)的異常處理程序可以不加區(qū)分的進(jìn)行統(tǒng)一處理。本發(fā)明實(shí)施例的方法進(jìn)一步包括如果當(dāng)前不存在與該異常類型匹配的異常處理程序時(shí),將獲得的與異常相關(guān)的信息重新傳遞出去,或者,當(dāng)都匹配不上時(shí),啟動(dòng)默認(rèn)處理程序,所述默認(rèn)處理程序?yàn)橹貑⑾到y(tǒng)。為了進(jìn)一步的提供對(duì)異常處理方式的精細(xì)管理,在本發(fā)明實(shí)施例中,根據(jù)獲得的所述異常,確定相應(yīng)的異常處理程序,由所述異常處理程序處理所述異常的步驟,在另一種實(shí)現(xiàn)下,可以包括獲得傳遞過(guò)來(lái)的與異常相關(guān)的信息,所述與異常相關(guān)的信息中包含異常類型標(biāo)識(shí)、指定處理方式標(biāo)識(shí);需要說(shuō)明的是可以通過(guò)不同的指定處理方式標(biāo)識(shí)表示不同的指定處理方式,例如1表示容錯(cuò)的處理方式;0表示查錯(cuò)的處理方式。確定與所述異常類型標(biāo)識(shí)對(duì)應(yīng)的異常類型所匹配,且與所述的指定處理方式標(biāo)識(shí)對(duì)應(yīng)的處理方式所匹配的異常處理程序,由所述異常處理程序處理所述異常。其中,處理方式可以為容錯(cuò)或查錯(cuò)。當(dāng)所述處理方式是容錯(cuò)處理方式,由容錯(cuò)方式的異常處理程序處理所述異常;當(dāng)所述處理方式是查錯(cuò)處理方式,由查錯(cuò)方式的異常處理程序處理所述異常,其中,所述異常處理程序與所述程序代碼片段相互獨(dú)立。如果當(dāng)前不存在與該異常類型匹配,且與指定的處理方式匹配的異常處理程序時(shí),將獲得的與異常相關(guān)的信息重新傳遞出去,或者,當(dāng)都匹配不上時(shí),啟動(dòng)默認(rèn)處理程序, 所述默認(rèn)處理程序?yàn)橹貑⑾到y(tǒng)。因此,本發(fā)明實(shí)施例不僅可以實(shí)現(xiàn)針對(duì)不同類型的異常進(jìn)行不同的處理,而且還能根據(jù)用戶設(shè)置的方式對(duì)異常以不同的處理方式進(jìn)行處理,例如,在開(kāi)發(fā)階段,對(duì)異常的處理主要方法是捕獲異常處理錯(cuò)誤并輸出錯(cuò)誤,而在開(kāi)發(fā)完成產(chǎn)品發(fā)布時(shí),異常處理的主要方法是容錯(cuò)恢復(fù)。本發(fā)明實(shí)施例中的異常處理程序還能夠匹配和處理多種類型的異常。如果有多個(gè)與所述異常類型相匹配的異常處理程序,則確定與所述異常類型標(biāo)識(shí)對(duì)應(yīng)的異常類型所匹配的異常處理程序的步驟為確定與所述異常類型標(biāo)識(shí)對(duì)應(yīng)的異常類型所匹配的,且與所述程序代碼片段位置最近的一個(gè)異常處理程序。如果所述程序代碼片段被調(diào)用時(shí)出現(xiàn)異常,則由所述異常處理程序處理所述異常之后,還包括逐級(jí)返回所述程序代碼片段正常運(yùn)行后的結(jié)果,或者運(yùn)行與所述異常處理程序相鄰且在其之后的程序代碼片段;從而進(jìn)一步提高正常流程下的代碼運(yùn)行效率。在一種實(shí)現(xiàn)下,由匹配和捕捉異常功能的宏來(lái)匹配和捕捉異常;由具有監(jiān)控功能的宏來(lái)監(jiān)控正在運(yùn)行的需要保護(hù)的程序代碼片段;由具有拋出異常功能的宏來(lái)拋出所述異常。具體的,程序代碼片段可以是指函數(shù),也可以是指由多個(gè)函數(shù)組成的模塊,還可以是指由多個(gè)模塊組成的部件,當(dāng)然,程序代碼片段還可以是其他級(jí)別的程序段,這里不再一一列舉。在嵌入式C語(yǔ)言環(huán)境下,可以由具有監(jiān)控功能的宏來(lái)監(jiān)控程序代碼片段,例如可以由封裝C語(yǔ)言的SetjmpO函數(shù)的宏。當(dāng)程序代碼片段在運(yùn)行過(guò)程中出現(xiàn)異常時(shí),需要拋出異常,而在拋出異常之前,可以記錄與異常相關(guān)的信息,這樣,拋出異常時(shí),可以拋出與異常相關(guān)的信息。與異常相關(guān)的信息既可以包括軟件異常信息,也可以包括硬件異常信息。在嵌入式C語(yǔ)言環(huán)境下,可以由具有拋出異常功能的宏來(lái)拋出異常,例如可以由封裝C語(yǔ)言的IongjmpO函數(shù)的宏。針對(duì)需要保護(hù)的程序代碼片段,可以建立至少一個(gè)異常處理程序。每個(gè)異常處理程序可以匹配和處理一種類型的異常,也可以匹配和處理多種類型的異常。不同的異常處理程序可以處理同一種類型的異常,當(dāng)異常被拋出時(shí),可以從中選擇一個(gè)異常處理程序來(lái)處理這種類型的異常,例如,可以選擇一個(gè)與所述程序代碼片段最近的一個(gè)異常處理程序處理所述異常。具體的,假設(shè)某個(gè)程序代碼片段之后分別有程序A、程序B和程序C等能夠處理同一個(gè)異常的異常處理程序,當(dāng)程序代碼片段拋出異常時(shí),如果沒(méi)有特殊設(shè)置,則一般都由程序A(在程序代碼片段之后,在所有的能夠處理所述異常的異常處理程序中位置相對(duì)于該程序代碼片段最靠前)來(lái)處理所述異常。需要說(shuō)明的是,異常處理程序與程序代碼片段是相互獨(dú)立的,這樣至少有兩個(gè)優(yōu)點(diǎn)第一個(gè)優(yōu)點(diǎn)是,程序代碼片段在運(yùn)行過(guò)程中如果沒(méi)有出現(xiàn)異常,則異常處理程序不會(huì)被執(zhí)行,從而不影響程序代碼片段的正常運(yùn)行,客觀上也提高了程序代碼片段的運(yùn)行效率;第二個(gè)優(yōu)點(diǎn)是,可以給用戶提供是否由異常處理程序來(lái)處理異?;蛘哂赡姆N異常處理程序來(lái)處理異常的選擇。在實(shí)際應(yīng)用中,程序代碼片段可能是在被調(diào)用過(guò)程中出現(xiàn)異常,由與所述異常的類型相匹配的異常處理程序處理所述異常之后,可以逐級(jí)返回的是程序代碼片段正常運(yùn)行后的結(jié)果。例如,函數(shù)A調(diào)用函數(shù)B,函數(shù)B調(diào)用函數(shù)C,如果函數(shù)C在運(yùn)行時(shí)發(fā)生異常,并且存在與異常的類型相匹配的異常處理程序,則可以由異常處理程序處理異常,處理異常后,函數(shù)C可以正常運(yùn)行,其正常運(yùn)行的結(jié)果可以返回給函數(shù)B,函數(shù)B再將函數(shù)B的運(yùn)行結(jié)果返回給函數(shù)A。由此可見(jiàn),即使函數(shù)B調(diào)用函數(shù)C時(shí),函數(shù)C運(yùn)行出現(xiàn)異常,但對(duì)于函數(shù) A和函數(shù)B來(lái)說(shuō),這個(gè)或這些異常都是不被發(fā)現(xiàn)的,函數(shù)A和函數(shù)B得到的分別是函數(shù)B正常運(yùn)行的結(jié)果和函數(shù)C正常運(yùn)行的結(jié)果。另外,由與所述異常的類型相匹配的異常處理程序處理所述異常之后,也可以運(yùn)行所述異常處理程序之后的程序代碼片段。還是以上面的例子為例,即使由異常處理程序處理異常,但不再返回執(zhí)行函數(shù)C,而是執(zhí)行后續(xù)的程序代碼片段,后續(xù)的程序代碼片段可以是指與異常處理程序相鄰且在其位置之后的程序代碼片段,也可以是指異常處理程序之后的任意一個(gè)程序代碼片段。在嵌入式C語(yǔ)言環(huán)境下,可以由由用C語(yǔ)言實(shí)現(xiàn)的具有匹配和捕捉異常功能的宏來(lái)匹配和捕捉異常,例如可以由封裝C語(yǔ)言的set jmp ()函數(shù)被調(diào)用后返回非0值的else 分支的宏。其中的一種嵌入式C語(yǔ)言環(huán)境下異常處理裝置(也可以稱為異常處理框架)如圖 2所示,包括監(jiān)控單元201,用于監(jiān)控正在運(yùn)行的需要保護(hù)的程序代碼片段;異常拋出單元202,用于在監(jiān)控單元201發(fā)現(xiàn)所述程序代碼片段出現(xiàn)異常后,拋出所述異常,所述異常包括軟件異常、硬件異常中的至少一種;匹配單元203,用于根據(jù)獲得的所述異常,確定對(duì)應(yīng)的異常處理程序,所述異常處理程序用于處理所述異常拋出單元拋出的異常,其中,所述異常處理程序與所述程序代碼片段相互獨(dú)立。在嵌入式C語(yǔ)言環(huán)境下,將具有監(jiān)控功能的宏模塊化即監(jiān)控單元,例如可以是封裝C語(yǔ)言的set jmp ()函數(shù)的宏。另外,上述裝置還可以包括信息記錄單元204,用于記錄與監(jiān)控單元201發(fā)現(xiàn)的所述程序代碼片段出現(xiàn)的異常相關(guān)的信息,并輸出給所述異常拋出單元202。這樣,異常拋出單元202在拋出異常時(shí),可以拋出與異常相關(guān)的信息。與異常相關(guān)的信息既可以包括軟件異常信息,也可以包括硬件異常信息。在C語(yǔ)言環(huán)境下,將具有拋出異常功能的宏模塊化即異常拋出單元202,例如可以是封裝C語(yǔ)言的IongjmpO函數(shù)的宏。異常拋出單元202為第一異常拋出單元,用于在監(jiān)控單元201發(fā)現(xiàn)所述程序代碼片段出現(xiàn)異常后,將所述與異常相關(guān)的信息打包后傳遞出去,所述與異常相關(guān)的信息至少包括異常類型標(biāo)識(shí),所述異常類型標(biāo)識(shí)用于表示當(dāng)前程序代碼片段出現(xiàn)的異常的類型。匹配單元203為第一匹配單元,用于獲得傳遞過(guò)來(lái)的與異常相關(guān)的信息,所述與異常相關(guān)的信息中包含異常類型標(biāo)識(shí),并確定與所述異常類型標(biāo)識(shí)對(duì)應(yīng)的異常類型所匹配的異常處理程序,由所述異常處理程序處理所述異常。匹配單元203為第二匹配單元,用于獲得傳遞過(guò)來(lái)的與異常相關(guān)的信息,所述與異常相關(guān)的信息中包含異常類型標(biāo)識(shí)、指定處理方式標(biāo)識(shí),并確定與所述異常類型標(biāo)識(shí)對(duì)應(yīng)的異常類型所匹配,且與所述的指定處理方式標(biāo)識(shí)對(duì)應(yīng)的處理方式所匹配的異常處理程序,由所述異常處理程序處理所述異常。例如,可以設(shè)置函數(shù)級(jí)別的異常處理程序,也可以設(shè)置模塊級(jí)別的異常處理程序,還可以設(shè)置部件級(jí)別的異常處理程序,假設(shè)對(duì)應(yīng)這三個(gè)級(jí)別的異常處理程序都能夠處理同一個(gè)類型的異常,但處理方式各不相同。用戶可以選擇處理異常的級(jí)別,假設(shè)用戶選擇了模塊級(jí)別,其對(duì)應(yīng)的異常處理程序的處理方式是容錯(cuò)處理, 當(dāng)需要保護(hù)的程序代碼片段在運(yùn)行過(guò)程中出現(xiàn)異常,則處理異常的就是模塊級(jí)別對(duì)應(yīng)的異常處理程序,即,對(duì)異常采取容錯(cuò)方式處理。處理方式可以包括容錯(cuò)和查錯(cuò)等多種方式,當(dāng)程序代碼片段出現(xiàn)異常時(shí),可以根據(jù)設(shè)置的處理方式處理異常。例如,如果設(shè)置的處理方式是容錯(cuò)處理方式,則可以使用容錯(cuò)方式的異常處理程序處理異常。再例如,如果設(shè)置處理方式是查錯(cuò)處理方式,則可以使用查錯(cuò)方式的異常處理程序處理異常,其中,異常處理程序與程序代碼片段相互獨(dú)立。如果有多個(gè)與所述異常的類型相匹配的異常處理程序,匹配單元203為第三匹配單元,用于根據(jù)獲得的所述異常,確定與所述異常的類型所匹配的,且與所述程序代碼片段位置最近的一個(gè)異常處理程序,由所述異常處理程序處理所述異常。在一程序執(zhí)行觸發(fā)異常時(shí),監(jiān)控單元201為第一監(jiān)控單元,用于根據(jù)設(shè)置的處理異常的粒度監(jiān)控所述正在運(yùn)行的需要保護(hù)的程序代碼片段。例如當(dāng)設(shè)置的處理異常的粒度為模塊級(jí)別時(shí),而所述正在運(yùn)行的需要保護(hù)的程序代碼片段是函數(shù)級(jí)別,則就不需要監(jiān)控所述正在運(yùn)行的需要保護(hù)的程序代碼片段;當(dāng)設(shè)置的處理異常的粒度為函數(shù)級(jí)別時(shí),而所述正在運(yùn)行的需要保護(hù)的程序代碼片段是模塊級(jí)別,則監(jiān)控所述正在運(yùn)行的需要保護(hù)的程序代碼片段;針對(duì)需要保護(hù)的程序代碼片段,可以建立至少一個(gè)異常處理程序。每個(gè)異常處理程序可以匹配和處理一種類型的異常,也可以匹配和處理多種類型的異常。不同的異常處理程序可以處理同一種類型的異常,當(dāng)異常拋出單元202拋出異常時(shí),可以由匹配單元203從中選擇一個(gè)異常處理程序來(lái)處理這種類型的異常,例如,可以選擇一個(gè)與所述程序代碼片段最近的一個(gè)異常處理程序處理所述異常。在實(shí)際應(yīng)用中,程序代碼片段可能是在被調(diào)用過(guò)程中出現(xiàn)異常,在匹配單元203 確定與所述異常的類型相匹配的異常處理程序,由該異常處理程序處理所述異常之后,程序代碼片段可以逐級(jí)返回正常運(yùn)行后的結(jié)果。在嵌入式C語(yǔ)言環(huán)境下,將由C語(yǔ)言實(shí)現(xiàn)的具有匹配和捕捉異常功能的宏模塊化即匹配單元203,例如可以是封裝C語(yǔ)言的setjmpO 函數(shù)被調(diào)用后返回非0值的else分支的宏。需要說(shuō)明的是,由于不同的異常處理程序可以適用于不同的異常,為方便識(shí)別異常類型,可以給不同的異常類型分配不同的標(biāo)識(shí),例如將異常統(tǒng)一分成a、b、C、d、e、f (小類),并且同時(shí)用另一個(gè)標(biāo)識(shí)區(qū)分哪些是軟件異常,哪些是硬件異常(大類),例如1表示軟件異常;0表示硬件異常。具體的,如圖3所示,首先獲得傳遞過(guò)來(lái)的與異常相關(guān)信息(簡(jiǎn)稱異常信息),該異常信息中包含異常類型標(biāo)識(shí),經(jīng)過(guò)宏的匹配,確定與該異常類型標(biāo)識(shí)對(duì)應(yīng)的異常類型匹配的異常處理程序,由相應(yīng)的異常處理程序處理相應(yīng)的異常類型的異常。除上述方法實(shí)施例和異常處理框架實(shí)施例外,本發(fā)明還提供了嵌入式系統(tǒng),所述系統(tǒng)包括上述異常處理裝置(即異常處理框架)。具體請(qǐng)參見(jiàn)上述對(duì)異常處理框架的描述, 這里不再贅述。除上述方法實(shí)施例外,本發(fā)明還提供了另外一個(gè)方法實(shí)施例。具體的,如圖4所示,包括步驟S401 執(zhí)行程序代碼;步驟S402 判斷是否觸發(fā)異常,如果是,則轉(zhuǎn)步驟S403,否則,轉(zhuǎn)步驟S401 ;步驟S403:根據(jù)處理異常的粒度,確定與粒度對(duì)應(yīng)的try塊(為描述方便,這里用 try塊表示具有監(jiān)控功能的宏);步驟S404 判斷try塊是否有except塊(為描述方便,這里用except塊表示具有捕捉和匹配異常功能的宏),如果是,轉(zhuǎn)步驟S406,否則,轉(zhuǎn)步驟S405 ;步驟S405 確定更高一級(jí)粒度對(duì)應(yīng)的try塊,轉(zhuǎn)步驟S404 ;
步驟S406 判斷except塊是否能夠處理異常,如果是,轉(zhuǎn)步驟S407,否則,轉(zhuǎn)步驟 S405 ;步驟S407 執(zhí)行except塊的代碼,轉(zhuǎn)步驟S401。本發(fā)明實(shí)施例首先在嵌入式C語(yǔ)言環(huán)境下建立異常記錄信息,建立異常相關(guān)信息的存儲(chǔ)和傳遞模型,最終實(shí)現(xiàn)異常關(guān)聯(lián)的機(jī)制和用戶接口。1.關(guān)于異常記錄信息表1為異常記錄信息的一種表現(xiàn)形式。
權(quán)利要求
1.一種嵌入式C語(yǔ)言環(huán)境下退出線程或進(jìn)程的方法,其特征在于,應(yīng)用于線程主動(dòng)退出的場(chǎng)景,包括獲得線程或進(jìn)程需要退出的信息;檢查需要退出的線程或進(jìn)程所拋出的異常是否仍然占用資源; 如果是,則釋放所述占用的資源; 退出所述線程或進(jìn)程。
2.如權(quán)利要求1所述的方法,其特征在于,檢查需要退出的線程或進(jìn)程所拋出的異常是否仍然占用資源具體包括檢查需要退出的線程或進(jìn)程是否已拋出異常; 如果是,則檢查已拋出的異常是否仍然占用資源。
3.一種嵌入式C語(yǔ)言環(huán)境下退出線程或進(jìn)程的裝置,其特征在于,包括 信息獲得單元,用于獲得線程或進(jìn)程需要退出的信息;資源檢查單元,用于在所述信息獲得單元獲得線程或進(jìn)程需要退出的信息后,檢查需要退出的線程或進(jìn)程所拋出的異常是否仍然占用資源;資源釋放單元,用于在所述資源檢查單元檢查出需要退出的線程或進(jìn)程所拋出的異常仍然占用資源,釋放所述占用的資源;退出單元,用于在所述資源釋放單元釋放所述占用的資源后,退出所述線程或進(jìn)程。
4.一種嵌入式C語(yǔ)言環(huán)境下刪除線程或進(jìn)程的方法,其特征在于,應(yīng)用于當(dāng)前線程或進(jìn)程被其他線程或進(jìn)程刪除的場(chǎng)景,包括確定需要?jiǎng)h除的線程或進(jìn)程;檢查需要?jiǎng)h除的線程或進(jìn)程所拋出的異常是否仍然占用資源; 如果是,則釋放所述占用的資源; 刪除所述線程或進(jìn)程。
5.如權(quán)利要求4所述的方法,其特征在于,檢查需要?jiǎng)h除的線程或進(jìn)程所拋出的異常是否仍然占用資源具體包括檢查需要?jiǎng)h除的線程或進(jìn)程是否已拋出異常; 如果是,則檢查已拋出的異常是否仍然占用資源。
6.一種嵌入式C語(yǔ)言環(huán)境下刪除線程或進(jìn)程的裝置,其特征在于,包括 確定單元,用于確定需要?jiǎng)h除的線程或進(jìn)程;資源檢查單元,用于在所述確定單元確定需要?jiǎng)h除的線程或進(jìn)程后,檢查需要?jiǎng)h除的線程或進(jìn)程所拋出的異常是否仍然占用資源;資源釋放單元,用于在所述資源檢查單元檢查出需要?jiǎng)h除的線程或進(jìn)程所拋出的異常仍然占用資源,釋放所述占用的資源;線程或進(jìn)程刪除單元,用于在所述資源釋放單元釋放所述占用的資源后,刪除所述線程或進(jìn)程。
全文摘要
本發(fā)明實(shí)施例提供一種嵌入式C語(yǔ)言環(huán)境下退出線程或進(jìn)程的方法、裝置以及嵌入式C語(yǔ)言環(huán)境下刪除線程或進(jìn)程的方法、裝置,所述退出線程或進(jìn)程的方法應(yīng)用于線程主動(dòng)退出的場(chǎng)景,包括獲得線程或進(jìn)程需要退出的信息;檢查需要退出的線程或進(jìn)程所拋出的異常是否仍然占用資源;如果是,則釋放所述占用的資源;退出所述線程或進(jìn)程。由此,無(wú)論是退出或者刪除線程或進(jìn)程,都可以釋放處理線程或進(jìn)程拋出的異常所占用的資源,當(dāng)其他線程或進(jìn)程需要使用這些資源時(shí),不會(huì)因?yàn)閯h除或退出的線程或進(jìn)程所拋出的異常仍然占用資源而導(dǎo)致其他線程或進(jìn)程無(wú)法使用這些資源。
文檔編號(hào)G06F11/36GK102163174SQ20111010750
公開(kāi)日2011年8月24日 申請(qǐng)日期2008年6月3日 優(yōu)先權(quán)日2008年6月3日
發(fā)明者余加強(qiáng), 鄭偉 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
宜川县| 肇东市| 正镶白旗| 新昌县| 防城港市| 旌德县| 乌鲁木齐市| 颍上县| 逊克县| 西峡县| 清远市| 平顶山市| 屯留县| 深水埗区| 泾川县| 黄山市| 新乡市| 固安县| 松阳县| 武邑县| 贵州省| 星子县| 青海省| 湘潭市| 乐安县| 临邑县| 临潭县| 蓬溪县| 腾冲县| 苏尼特左旗| 藁城市| 灵石县| 南木林县| 辽阳县| 珠海市| 福建省| 泰安市| 玛曲县| 毕节市| 开平市| 盖州市|