WEB开发网
开发学院手机开发Symbian 开发 Symbian 编程之活动对象正解 阅读

Symbian 编程之活动对象正解

 2010-03-18 20:58:00 来源:WEB开发网   
核心提示:CActiveScheduler::Install(scheduler);如果创建了一个基于GUI应用程序框架的应用程序,框架已经为我们创建并且安装了活动调度器,Symbian 编程之活动对象正解(5),我们可以直接使用CActiveScheduler的一系列方法,2、创建活动对象iMyAO = CMyActiveOb
CActiveScheduler::Install(scheduler);如果创建了一个基于GUI应用程序框架的应用程序,框架已经为我们创建并且安装了活动调度器,我们可以直接使用CActiveScheduler的一系列方法。

2、创建活动对象

iMyAO = CMyActiveObject::NewL(*console);此处创建的CMyActiveObject类是继承自CActive类的活动对象。

3、将活动对象添加到活动调度器中

void CMyActiveObject::ConstructL() { .... CActiveScheduler::Add( this); // Add to scheduler }可以看到,活动对象在通过“二阶段构造”创建时就已经将自己的指针添加到了活动调度器中。

4、StartL

StartL 为应用程序请求活动对象调用异步函数的方法,此处用户可以根据自身需求对此方法重新命名:

void CMyActiveObject::StartL(TTimeIntervalMicroSeconds32 aDelay) { Cancel(); // 取消异步函数请求 iStatus = KRequestPending; iTimer.After(iStatus, aDelay); // 在此处调用异步函数 SetActive(); // 将成员变量iActive = ETrue }因为不能保证用户在等待异步函数调用完毕返回的时候不重新调用StartL方法,所以在StartL方法的入口点首先调用Cancel()方法取消异步请求,否则可能会发生臭名远扬的“信号迷失”错误。

5、iStatus = KRequestPending

在以上代码 StartL方法中,异步函数调用之前,首先要将iStatus设置为KRequestPending以便活动调度器遍历时匹配。

6、请求异步函数并发送iStatus

在StartL方法中,iTimer.After(iStatus, aDelay);这行代码传递了成员变量的引用并调用了异步函数iTimer.After。

7、SetActive

调用基类CActive的SetActive方法,方法内部将iActive设置成ETrue,以便活动调度器遍历时匹配。

8、启动活动调度器

CActiveScheduler::Start();10、查找对应的活动对象

我们在上一节已经通过分析并还原了 CActiveScheduler::Start()方法的伪代码,此代码块在另外一个线程遍历所有向调度器注册的活动对象,查看对象的iStatus不为KRequestPending且iActive为ETrue。因为异步函数服务器完成了请求的工作以后,会改变iStatus的实参,使其不等于 KRequestPending,再加上活动对象在调用完异步函数返回后马上改变了iActive值为ETrue,所以活动调度器只要判断iStatus != KRequestPending && iActive == ETrue则可以知道哪一个活动对象所请求的异步服务已经完成。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Symbian 编程 活动

编辑录入:coldstar [复制链接] [打 印]
赞助商链接