Symbian 逐步深入
2010-03-26 04:24:00 来源:WEB开发网从上述的流程中可以认识到:活动调度器是桥梁~
CActiveScheduler* scheduler=new(ELeave)CActiveScheduler();
CActiveScheduler.Install(scheduler);//这里把调度器指向类内部的一个静态指针,后面的代码可以方便的使用CActiveScheduler的一系列函数
如:
IMPORT_C static void Add(CActive* aActive);//将活动对象加入活动调度器注册,以备使用
IMPORT_C static void Start();
IMPORT_C static void Stop();
上面已经说了ActiveScheduler,接下来说说活动对象CActive
我们使用一个类继承CActive类,则子类会生成如下的东西:
public:
TRequestStatus iStatus;//判断异步函数调用完成与否
private:
TBool iActive; //用于证明对象是否已经申请了异步函数
如:
RTime::After(iActive,100000);
SetActive();//为什么要这样子呢?
SetActive其实就是将 iActive=ETrue,用来标示活动对象已经申请了异步调用。所以一旦我们调用了异步调用,就需要有SetActive()函数。
之后,我们要实现两个重要的函数:
virtual void DoCancel()=0;
virtual void RunL()=0;
RunL()—上面已经说过,当一个活动对象执行完成之后,status会变成EActive。这个状态的改变是由活动对象自动识别的,执行完成之后做的事情,我们需要在RunL()进行编码,首先要将iActive=EFalse,因为异步函数After传入的参数都是引用,所以可以改变。
DoCancle():基类CActive中的取消活动对象的方法Cancle(),之后通知活动对象调用DoCancle做善尾操作,如删除对象等,!!!终止对象是由Cancle()来完成!!!
! AO,AS是很复杂的东西,需要你自己多去了解!
遇到错误:KERN-EXE 3 错误原因是一个对象没有new,但是用它去指向一些东西
CONF 14 资源id无法获取
KERN-EXE X 在UI的时候发生错误,原因是
E32USER-CBASE 40 调用基于CActive的析构函数时存在未完成的请求。
case XX:
{
//error
//break我写在这里
}
更多精彩
赞助商链接