彻底理解 Symbian 活动对象
2010-08-24 05:50:00 来源:WEB开发网2、有两个虚方法必须继承:
virtual void DoCancel() =0virtual void RunL() =0;
RunL方法:活动调度器接收到异步函数返回的“完成”消息后,遍历在其注册的所有活动对象,如果活动对象的iActive = ETrue且iStatus != KRequestPending则调用活动对象的RunL方法,并将iActive设置成EFalse,以防下次轮询时仍然调用此活动对象。
在这里“RunL”这个名字会让很多人产生歧义,我刚开始接触的时候总以为和J2me中的Runnable接口的run方法差不多。其实在这里把“RunL”改为“NotifyRequestCompleteL”更贴切些。
再次声明一下,调用异步函数时,参数TRequestStatus& status都是以引用的方式传递的,如:
IMPORT_C void After(TRequestStatus &aStatus, TTimeIntervalMicroSeconds32 anInterval);
所以异步函数内部可以改变status的实参,也就是改变活动对象的类成员iStatus。 DoCancel()方法:基类CActive中有取消异步函数的方法Cancel(),调用Cancel()后,活动对象会通过DoCancel()方法通知应用程序做取消方法的后期工作,如删除对象及回收指针等。注意:在应用程序中如果想终止活动对象,要使用Cancel()方法调用而不是 DoCancel()方法。
3、活动对象的带优先级的构造函数:
基类CActive的构造函数原型如下:
protected:
IMPORT_C CActive(TInt aPriority);
此处将传入一个优先级枚举值,枚举值内容如下:
/**
Defines standard priorities for active objects.
*/
enum/**
A low priority, useful for active objects representing
background processing.
*/
EPriorityIdle=-100/**
A priority higher than EPriorityIdle but lower than EPriorityStandard.
*/
EPriorityLow=-20/**
Most active objects will have this priority.
*/
EPriorityStandard=0/**
A priority higher than EPriorityStandard; useful for active objects
handling user input.
*/
EPriorityUserInput=10/**
A priority higher than EPriorityUserInput.
*/
更多精彩
赞助商链接