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

Symbian 编程之活动对象正解

 2010-03-18 20:58:00 来源:WEB开发网   
核心提示:iConsole.Write(outputStr);iConsole.Write(_L(""));iCount++;}使用CActiveSchedulerWait的几点注意事项:CActiveSchedulerWait必须结合活动对象使用,而且使用方法只有以上代码介绍的那一种;Start方法和Asy

iConsole.Write(outputStr);

iConsole.Write(_L(" "));

iCount++;

}

使用CActiveSchedulerWait的几点注意事项:

CActiveSchedulerWait必须结合活动对象使用,而且使用方法只有以上代码介绍的那一种;

Start方法和AsyncStop方法必须成对出现;

程序退出时要检查 CActiveSchedulerWait是否在IsStarted()状态,如果是则调用AsyncStop方法。否则程序不能正常退出;

CActiveScheduler 类内部有自己的静态指针,提供的静态方法都调用了内部的静态指针。而CActiveSchedulerWait 类没有内部静态指针,方法也不是静态的,我们必须自己管理CActiveSchedulerWait类的全局指针,在这点上程序要经过良好的设计。

二、使用User::WaitForRequest方法

如果不想使用活动对象,也不想使用难于管理的CactiveSchedulerWait,你可以使用User::WaitForRequest方法。以下是User::WaitForRequest方法的原型:

IMPORT_C static void WaitForRequest(TRequestStatus& aStatus);

此方法将等待异步函数服务器返回的信号量,然后匹配aStatus参数。如果接收到的信号与参数aStatus一一匹配,则跳过阻塞进入下一行代码,否则继续阻塞线程直到aStatus对应的信号通知返回。

User::WaitForRequest还有一个重载的方法,它可以监视两个信号的通知:

IMPORT_C static void WaitForRequest(TRequestStatus& aStatus1,TRequestStatus& aStatus2);

有了User::WaitForRequest,异步函数使用起来就变得非常方便,我们不需要创建活动对象,也不需要创建成员变量 TRequestStatus,只需要声明局部的TRequestStatus、局部的异步函数类,在异步函数调用之后,加入 User::WaitForRequest(status),就能够使线程阻塞在User::WaitForRequest处直到status对应的异步函数处理完成。

LOCAL_C void DoTestL()

{

RTimer timer;

CleanupClosePushL(timer);

User::LeaveIfError(timer.CreateLocal());

TRequestStatus status(KRequestPending);

// 调用异步方法并将status传入

timer.After(status, 1000000);

// 等待status对应的信号量,此处用了User::WaitForRequest方法将异步方法的调用模拟成同步

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

Tags:Symbian 编程 活动

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