日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java函数ao活动对象_[AO] AO全面介绍

發(fā)布時(shí)間:2024/9/19 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java函数ao活动对象_[AO] AO全面介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

活動(dòng)對(duì)象:一.同步函數(shù)被調(diào)用時(shí),它會(huì)將服務(wù)執(zhí)行完成,然后才返回到其調(diào)用處。

異步函數(shù)則會(huì)在函數(shù)調(diào)用中提交一個(gè)請求,然后馬上返回到調(diào)用處,但該請求會(huì)遲些才會(huì)完成。在請求完成之前,調(diào)用者可以繼續(xù)執(zhí)行其它的處理,在請求完成時(shí),調(diào)用者會(huì)接受到一個(gè)表明請求成功或失敗的通知信號(hào)。這個(gè)通知信號(hào)就是一個(gè)事件,而這種方式就是事件驅(qū)動(dòng)的。

雖然所有活動(dòng)對(duì)象事件處理(RunL)都是非搶占的,但在多數(shù)情況下,可以在活動(dòng)對(duì)象的事件處理方法(RunL)中嵌入單獨(dú)的活動(dòng)規(guī)劃器,并且使用嵌入的活動(dòng)規(guī)劃器來接受其它活動(dòng)對(duì)象的請求。這對(duì)于”等待”的模式對(duì)話框可能有用,但是,這是有弊端的,所以盡量不要使用。如果一旦使用這種嵌入的活動(dòng)規(guī)劃器,一定要確保CActiveScheduler::Start()方法與CActiveScheduler::Stop()方法嚴(yán)格匹配。

二.大多數(shù)活動(dòng)規(guī)劃器是由框架隱式創(chuàng)建的(例如GUI框架中的CONE),但若是實(shí)現(xiàn)一個(gè)服務(wù)器或基于控制臺(tái)的代碼,就必須在使用活動(dòng)對(duì)象前顯式創(chuàng)建并啟動(dòng)一個(gè)活動(dòng)規(guī)劃器。

在Symbian中有一些線程沒有活動(dòng)規(guī)劃器,因此它們無法直接使用活動(dòng)對(duì)象或那些使用了活動(dòng)對(duì)象的組件:

1.Java的實(shí)現(xiàn)不支持活動(dòng)規(guī)劃器,Java的本地方法不能使用活動(dòng)對(duì)象。但是Java可以在代碼中調(diào)用使用了活動(dòng)對(duì)象的C++服務(wù)器,因?yàn)檫@些服務(wù)器運(yùn)行在單獨(dú)的一個(gè)有活動(dòng)規(guī)劃器的線程。

2.STDLIB,即C標(biāo)準(zhǔn)庫線程是沒有活動(dòng)規(guī)劃器的,因而標(biāo)準(zhǔn)庫代碼是不能使用活動(dòng)對(duì)象的。但標(biāo)準(zhǔn)庫提供的代碼可以被活動(dòng)對(duì)象代碼所使用

3.OPL不支持活動(dòng)規(guī)劃器,并且OPL的C++擴(kuò)展(OPX)也不可以使用活動(dòng)對(duì)象或那些使用了活動(dòng)對(duì)象的組件。

三.CActive通過如下步驟實(shí)現(xiàn)Cancel():

1.檢查iActive,判斷是否存在未完成的請求(至多只能有一個(gè))。如果沒有,則不需要再做什么。

2.調(diào)用DoCancel()使異步服務(wù)提供器停止。

3.調(diào)用User::WaitForRequest(),并指定iStatus。這可以保證立即完成,它會(huì)減少線程信號(hào)量,隨后由活動(dòng)規(guī)劃器調(diào)用的User::WaitForRequest()不會(huì)因?yàn)樵撊∠埱蠖e(cuò)誤地完成。

4.重新設(shè)置iActive為EFalse,至此表明此活動(dòng)對(duì)象未完成的請求已經(jīng)完成。

若某一個(gè)長線任務(wù)可以分割為若干個(gè)小的片段,則強(qiáng)烈建議利用低優(yōu)先級(jí)(比如CActive::TPriority::EPriorityIdle(-100))的活動(dòng)對(duì)象來實(shí)現(xiàn)。否則就只用通過低優(yōu)先級(jí)的后臺(tái)線程來實(shí)現(xiàn)了。

CIdle就是一個(gè)繼承了CActive用來進(jìn)行長線任務(wù)的包裝類。CIdle對(duì)象應(yīng)該在被創(chuàng)建時(shí)賦予一個(gè)低優(yōu)先級(jí)。

CPeriodic類是用于運(yùn)行片段化任務(wù)的另一個(gè)有用的CActive派生類。它使用一個(gè)定時(shí)器對(duì)象來產(chǎn)生規(guī)則的定時(shí)器事件,每當(dāng)發(fā)生定時(shí)器事件,它都處理任務(wù)中的單獨(dú)一步。和CIdle相似,CPeriodic也是由一個(gè)優(yōu)先級(jí)來初始化,并且任務(wù)通過調(diào)用Start()被初始化,傳入的參數(shù)除了執(zhí)行任務(wù)片段的回調(diào)函數(shù)還有一個(gè)定時(shí)器的設(shè)定值。當(dāng)定時(shí)器周期到達(dá)時(shí),CPeriodic對(duì)象產(chǎn)生一個(gè)可以被活動(dòng)規(guī)劃器檢測到的事件,當(dāng)沒有更高優(yōu)先級(jí)的活動(dòng)對(duì)象要進(jìn)行事件處理時(shí),活動(dòng)規(guī)劃器會(huì)調(diào)用CPeriodic對(duì)象的RunL方法,而RunL則按順序調(diào)用完成任務(wù)處理的回調(diào)函數(shù);而如果定時(shí)器發(fā)出周期到達(dá)事件時(shí),其它更高優(yōu)先級(jí)的活動(dòng)對(duì)象也產(chǎn)生了完成事件,那后者將會(huì)被處理;還有一種情況是當(dāng)定時(shí)器在計(jì)時(shí)中,另一個(gè)活動(dòng)對(duì)象產(chǎn)生了完成事件,那么活動(dòng)規(guī)劃器這時(shí)就會(huì)執(zhí)行另一個(gè)活動(dòng)對(duì)象的事件處理方法。

我們可以通過使線程中所有活動(dòng)對(duì)象都只執(zhí)行簡短,高效的RunL方法以及讓CPeriodic對(duì)象具有比其它活動(dòng)對(duì)象更高的優(yōu)先級(jí)來改善信號(hào)的響應(yīng)和回調(diào)處理。

四.當(dāng)活動(dòng)對(duì)象發(fā)出一個(gè)請求時(shí),可以通過以下4種方式完成:

1.由于沒有用于相關(guān)資源的內(nèi)存,或者是存在無效的參數(shù)等原因使請求甚至無法開始執(zhí)行。若發(fā)生這種情況,請求的函數(shù)不應(yīng)該異常退出,也不應(yīng)該返回一個(gè)非零的錯(cuò)誤碼。相反,它應(yīng)該將實(shí)現(xiàn)代碼提交到請求狀態(tài)中,從而該請求將只完成一次。如下圖所示:

總結(jié)

以上是生活随笔為你收集整理的java函数ao活动对象_[AO] AO全面介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。