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

Symbian 之活动对象

 2010-04-20 16:03:00 来源:WEB开发网   
核心提示:Error()函数,默认行为是导致严重错误,Symbian 之活动对象(3),5、 实际上只是一个封装的整数,用于表示异步服务提供器返回的状态或错误码,而线程的挂起通过函数 WaitForAnyRequest()),(2) 将给定的TRequestStatus设置为不同于KRequestPending的值(如果一切运行
Error()函数,默认行为是导致严重错误。

5、 实际上只是一个封装的整数,用于表示异步服务提供器返回的状态或错误码。活动对象发出请求后,服务提供器的第一个任务是将iStatus设为 KrequestPending,当请求的服务完成时,服务提供器将iStatus的值设为KErrNone(如果请求成功完成)或错误码。 iStatus

四、活动对象的实现步骤:

1、 构造

活动对象几乎总是要使用二阶段构造,因为活动对象通常需要连接到它们的异步服务提供器,这个连接过程可能失败。

选择最适合活动对象的优先级,该优先级只会影响活动对象在活动规划器的列表中的顺序,实际开发时,很少使用EPriorityStandard以外的优先级。

CCsvFileLoader::CCsvFileLoader(RFs& aFs , CElementList& aElementList , MCsvFileLoaderObserver& aObserver) : CActive (EPriorityStandard)

{

}

void CCsvFileLoader::ConstructL (const TDesC& aFileName)

{

iFileName = aFileName;

User::LeaveIfError(iFile.open(iFs , iFileName , EFileRead));

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

CActiveScheduler::Add(this);

//活动对象加到活动规划器中,这条语句也可以放在第//一阶段构造函数中

}

通过句柄RTimer和RFile链接到所需的两个异步服务器。

警告:必须将活动对象都添加到活动规划器中,并且只能添加一次。添加失败将产生请求迷失的严重错误。

2、 启动活动对象

void CCsvFileLoader::Start( )

{

TInt delay = (iFileName.Size() % 10) * 100000;

iTimeWaster.After(iStatus , delay);

SetActive();//将iActive设为Etrue

}

异步服务提供器(运行在另一线程或进程中)将通过完成下面两件事来用信号通知线程(活动对象所属的线程)。

(1) 增加线程的信号量(这个信号量,一般情况用不到。只是当活动对象所属的线程被挂起时,通过增加信号量重新唤醒这个线程,而线程的挂起通过函数 WaitForAnyRequest())。

(2) 将给定的TRequestStatus设置为不同于KRequestPending的值(如果一切运行良好,则很有可能是KErrNone)。

上一页  1 2 3 4 5  下一页

Tags:Symbian 活动 对象

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