*安裝和啟動活動調度器
*活動調度器的虛擬碼樣本
*活動調度器的函數
*定製活動調度器
*安裝和啟動活動調度器
- GUI應用程式會自動安裝和運行活動調度器,不用手動安裝
- 對於非GUI應用程式,則需要手動建立,安裝和運行活動調度器,比如
如果線程已經安裝了活動調度器,再次安裝會導致嚴重錯誤(E32USER-CBase43)
//建立
CActiveScheduler* mySched = new(Eleave) CActiveScheduler;
//安裝
CActiveScheduler :: Install(mySched);
//添加使用中的物件,並且發起非同步函數請求
//運行活動調度器
CActiveScheduler :: Start();
*活動調度器虛擬碼樣本
Do
{
WaitForAnyRequest();
For (I=0; I<NUMBER_OF_ACTIVE_OBJECTS; I++)
{
IF (ACTIVE_OBJECT[i],iActive && (ACTIVE_OBJECT[I].iStatus != KRequestPending))
{
ACTIVE_OBJECT[I].RunL();
Break;
}
IF (I == NUMBER_OF_ACTIVE_OBJECTS)
{
GENERATE_STRAY_SIGNAL_EXCEPTION();
}
}WHILE(ActiveScheduler::Stop()
}
*活動調度器函數
- void Add(CActive* aActiveObject)
添加使用中的物件到當前的活動調度器
- Void Install(CActiveScheduler* aActiveScheduler)
安裝aActiveScheduler為當前線程的活動調度器
- Void Replace(CAcitveScheduler* aACtiveSCheduler)
和Install()類似,噹噹前線程已經安裝了活動調度器時,用aActiveScheduler取代當前活動調度器
- Void Start()
啟動活動調度器,開始處理使用中的物件事件
- Void Stop()
退出當前活動高度器的事件迴圈
- CActiveScheduler* Current()
返回當前線程的活動調度器的指標
*定製活動調度器
- virtual void OnStarting()
在事件迴圈開始之前,由CActiveScheduler基類的Start()函數調用
- Virtual void OnStopping()
由CActiveScheduler基類的Stop()函數調用,預設實現是空
- Virtual void Error(Tint aErr)
當使用中的物件在RunL()函數中發生異常退出,而且使用中的物件的RunError()函數並沒有對此做出處理時,該函數被使用中的物件調度器調用
預設實現是發出E32USER-CBase47異常
- Virtual void WaitForAnyRequest()
由使用中的物件調度器事件迴圈發起調用,用於等待非同步函數完成
預設實現是調用User::WaitForRequest()