现在的位置: 首页 > 综合 > 正文

活动对象框架之四:使用活动调度器

2013年08月25日 ⁄ 综合 ⁄ 共 1640字 ⁄ 字号 评论关闭

*安装和启动活动调度器

*活动调度器的伪代码示例

*活动调度器的函数

*定制活动调度器

 

*安装和启动活动调度器

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

抱歉!评论已关闭.