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

Symbian 之活动对象

 2010-04-20 16:03:00 来源:WEB开发网   
核心提示:3、 ()RunL这个函数比较复杂,它将执行大量任务:(1) 决定下一次迭代应该做什么(加载数据或浪费时间)(2) 检查最后一次迭代状态,Symbian 之活动对象(4),并且将这个状态报告给观察器(3) 处理所有加载的数据一般活动对象的这个RunL()方法希望完成上述的一项或几项工作,在这里还可以再次调用Start(

3、 ()RunL

这个函数比较复杂,它将执行大量任务:

(1) 决定下一次迭代应该做什么(加载数据或浪费时间)

(2) 检查最后一次迭代状态,并且将这个状态报告给观察器

(3) 处理所有加载的数据

一般活动对象的这个RunL()方法希望完成上述的一项或几项工作。

在这里还可以再次调用Start(),也就是说可以再次发布服务请求。

4、 在RunError()中处理错误

活动对象完全允许RunL()异常退出,结尾是“L”表明了这一点。如果该函数确实异常退出,则它异常退出时的错误码将被传递到RunError()。

TInt CCsvFileLoader::RunError(TInt aError)

{

iObserver.NotifyLoadCompleted(aError , *this);

return KErrNone;

}

这里的错误处理很简单,仅仅将错误传递给了观察器。

5、 删除未完成的请求

所有的活动对象都必须实现一个DoCancel()方法,用于删除任何未完成的请求。

void CCsvFileLoader::DoCancel()

{

if(iWastingTime || !iHaveTriedToLoad)

{

iTimeWaster.Cancel();

}

}

CActive::Cancel调用DoCancel(),绝对不允许重写CActive::Cancel()自身(它无论如何都不是虚函数),因为该函数完成了大量重要的工作。

(1) 检查活动对象是否实际上处于活动状态。如果不是,它就会返回,而不作任何事情。

(2) 调用DoCancel()

(3) 等待请求完成,这必须尽可能完成(原始请求可能在删除它之前就已经完成)

(4) 将iActive设为假。

注意:可以重写DoCancel()方法,但不可以重写Cancel()方法,这个方法会自动调用DoCancel(),另外,我们也不能直接调用 DoCancel()方法,这一点也是很重要的。

6、 析构函数

CCsvFileLoader::~CCsvFileLoader()

{

Cancel();

iFile.close();

iTimeWaster.Close();

}

任何活动对象析构函数的第一步都是调用Cancel()删除任何未完成的请求。如果删除一个带有未完成请求的活动对象,则产生一个请求迷失的严重错误。

必须关闭异步服务提供器的任何句柄,从而避免资源泄漏。

上一页  1 2 3 4 5  下一页

Tags:Symbian 活动 对象

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