WEB开发网
开发学院手机开发Symbian 开发 彻底理解 Symbian 活动对象 阅读

彻底理解 Symbian 活动对象

 2010-08-24 05:50:00 来源:WEB开发网   
核心提示:Symbian编程总结-基础篇-活动对象正解(3)-活动对象的工作原理我们已经知道如何创建和使用活动对象,大家对活动对象的创建、使用都有了一定的了解,彻底理解 Symbian 活动对象(5),在这一节里我将深入活动对象机制,分为“活动对象的工作流程”、“信号迷失错误”两个部分,此处用户可以根据自身需求对此方法重新命名:

Symbian编程总结-基础篇-活动对象正解(3)-活动对象的工作原理

我们已经知道如何创建和使用活动对象,大家对活动对象的创建、使用都有了一定的了解。在这一节里我将深入活动对象机制,分为“活动对象的工作流程”、“信号迷失错误”两个部分,为大家剖析活动对象的工作原理。

一、活动对象工作流程

首先我们用时序图来说明一下应用程序、活动对象、活动调度器及异步函数服务器之间创建及调用的流程:

下面我们针对每一个步骤结合代码(点击此处下载代码)进行说明:

1、创建并安装活动调度器:

CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();

CleanupStack::PushL(scheduler);

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()方法取消异步请求,否则可能会发生臭名远扬的“信号迷失”错误。

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

Tags:彻底 理解 Symbian

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