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

Symbian 编程之活动对象正解

 2010-03-18 20:58:00 来源:WEB开发网   
核心提示:一、使用CActiveSchedulerWait类在以前的文章"Symbian编程总结-界面篇-打开jpeg/gif/png图像"里我们已经看到了CActiveSchedulerWait类的使用方法,在此我再详细介绍一下,Symbian 编程之活动对象正解(7),很多初学者在开始时会将CActive

一、使用CActiveSchedulerWait类

在以前的文章"Symbian编程总结-界面篇-打开jpeg/gif/png图像"里我们已经看到了CActiveSchedulerWait类的使用方法,在此我再详细介绍一下。

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

调用 CActiveSchedulerWait::Start()方法时,线程阻塞;

调用 CActiveSchedulerWait::AsyncStop()方法时,请求停止对线程的阻塞

因此,我们在不修改原来活动对象代码的情况下,只要简单的在异步函数调用方法后加上"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

if (iWait->IsStarted())

{

iWait->AsyncStop();

}

delete iWait;

iWait = NULL;

}

void CMyActiveObject::StartL(TTimeIntervalMicroSeconds32 aDelay)

{

Cancel(); // Cancel any request, just to be sure

iTimer.After(iStatus, aDelay); // Set for later

SetActive(); // Tell scheduler a request is active

iWait->Start(); // 第1点

}

void CMyActiveObject::RunL()

{

iWait->AsyncStop(); // 第2点

TBuf<50> outputStr;

outputStr.AppendNum(iCount);

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

Tags:Symbian 编程 活动

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