活动对象与调度器

一个活动对象在一个活动调试器(CActiveScheduler) 运行的两个标志,

1. 是CActive::iActive =ETrue;

2. 有iStatus值(KErrNone)

a) CActive里有两个纯虚方法必须得实现的: RunL()与DoCancel,另外还有一个RunError(TInt aError);虚方法,这个方法用处不多,这里我最主要讲SetActive()与DoCancel方法的正确使用

RunL()方法大家都知道,是活动对象在激活(SetAction()),iStatus状态改变后,活动调试器(CActiveScheduler) 调用的方法,而这个iStatus请求状态必须得与一个异步方法关联在一起,如:

RTimer iTimer;

User::LeaveIfError(iTimer.CreateLocal()); //创建一个时间点

iTimer.After(iStatus,1); //注意与一个异步函数关联

CActive::SetActive();

如果没有一个异步方法与之关联,活动对象将会有信号丢失,在程序退出时,

活动调试器(CActiveScheduler) 将会在一个死循环里出不来(也就是程序没能完全退出) (因为无法把iActive这个状态复原),如下代码,在程序退出时,应用程序无法把活动调试器(CActiveScheduler)卸载掉,也就是程序并不能完全退出,可能退出的只是UI界面.

CActive::SetActive();//程序将会立刻进入RunL方法,运行完全,信号丢失,活动调试器(CActiveScheduler)无法卸载掉,

b) doCancel()方法运行的前提条件必须得是活动对象活动的状态,也就是iActive=ETrue状态.

      另外活动对象在 活动状态的时候,不能直接调用doCancel(),否则程序弹出,内存泄露错误,

       我猜,在调用Cancel()方法时,不单只是简单的调用doCancel()方法,可能还做了些状态复原之类的工作(像iActive与零 iStatus状态等).


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kaiming2008/archive/2009/02/14/3889110.aspx

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值