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

彻底理解 Symbian 活动对象

 2010-08-24 05:50:00 来源:WEB开发网   
核心提示:活动对象根本没有注册到活动调度器中:没有调用CActiveScheduler::Add方法注册活动对象不满足活动调度器查找活动对象的标准iStatus != KRequestPending && iActive == ETrue:在调用异步函数后,没有调用SetActive()方法将iActive的值设为ETrue;或

活动对象根本没有注册到活动调度器中:没有调用CActiveScheduler::Add方法注册活动对象不满足活动调度器查找活动对象的标准iStatus != KRequestPending && iActive == ETrue:在调用异步函数后,没有调用SetActive()方法将iActive的值设为ETrue;或者将iStatus同时传给两个异步函数,导致第二个异步函数返回时,当前活动对象的iActive为EFalse,调度器找不到相应的活动对象。

三、小结

在这一节里,我们学习了活动对象的内部工作原理,让我们对活动对象处理机制有了更深入的了解。在下一节里,我们将学习如何同步调用现有的异步函数。

Symbian编程总结-基础篇-活动对象正解(4)-异步函数的同步调用

我们深入了解了活动对象、活动调度器及异步函数服务器的工作原理及运行机制,想必大家对活动对象的机制及体系结构的运用已经了如指掌。但是大家有没有觉得异步函数使用起来比较麻烦呢?难道非要使用活动对象,非得以"异步"的方式调用异步函数吗?这一节将为大家解决这个问题:异步函数的同步使用。

一、使用CActiveSchedulerWait类

在以前的文章""里我们已经看到了CActiveSchedulerWait类的使用方法,在此我再详细介绍一下。

很多初学者在开始时会将CActiveScheduler和CActiveSchedulerWait类弄混,CActiveScheduler是活动对象的调度器,而CActiveSchedulerWait可以简单的理解为一个当前线程的阻塞器:

因此,我们在不修改原来活动对象代码的情况下,只要简单的在异步函数调用方法后加上"CActiveSchedulerWait::Start()",在活动对象的RunL方法的开头加入"CActiveSchedulerWait::AnsycStop()"就可以了。

针对上一节教程介绍的控制台应用程序,我们对以下几个方法(下划线为修改部分)进行修改:

CActiveSchedulerWait* iWait;

void CMyActiveObject::ConstructL()

User::LeaveIfError(iTimer.CreateLocal() ); // Initialize timer

CActiveScheduler::Add( this); // Add to scheduler

iWait = new (ELeave)CActiveSchedulerWait;

CMyActiveObject::~CMyActiveObject()

Cancel(); // Cancel any request, if outstanding

iTimer.Close(); // Destroy the RTimer object

// Delete instance variables if any

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

Tags:彻底 理解 Symbian

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