使用中的物件架構之四:使用活動調度器

來源:互聯網
上載者:User

*安裝和啟動活動調度器

*活動調度器的虛擬碼樣本

*活動調度器的函數

*定製活動調度器

 

*安裝和啟動活動調度器

 - 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()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.