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

Symbian 之活动对象

 2010-04-20 16:03:00 来源:WEB开发网   
核心提示:IMPORT_C void SetActive ();virtual void DoCancel () = 0;//两个纯虚函数,继承类必须实现它们virtual void RunL () = 0;//处理函数IMPORT_C virtual TInt RunError (TInt aError);public:Tre

IMPORT_C void SetActive ();

virtual void DoCancel () = 0;//两个纯虚函数,继承类必须实现它们

virtual void RunL () = 0;//处理函数

IMPORT_C virtual TInt RunError (TInt aError);

public:

TrequestStatus iStatus;//代表请求状态

…….

private:

TBool iActive;

…….

}

通过上面的CActive声明可以看出:活动对象和线程类似,构造时也会有一个优先级值来决定它们如何被调度,通常为活动对象提供一个标准优先级 EPriorityStandard。当活动对象响应的异步服务完成时,就会产生一个事件。活动调度器会侦测到事件,并决定每个事件对应的是哪个活动对象,然后调用恰当的活动对象去处理事件。当活动对象处理事件时,直到事件处理函数返回到活动调度器,该对象都是无法被抢占的,也就是说,RunL()事件处理函数是一个原子操作。

在Symbian OS中,活动对象相互协作并顺序的实现多任务,也不需要对共享的资源进行同步保护。另外,因为活动对象在同一个线程中运行,所以可以更容易地共享内存和对象,尽管活动对象存在于同一线程,但它们仍然是各自独立运行的,这就好像同一个进程中的线程是独立运行的一样。

三、关于活动对象基类CActive的几点说明:

参照上面CActive的声明

1、 必须在发布请求时调用SetActive(),否则活动对象规划器在搜索已完成的活动对象时忽略它,从而导致错误。需要说明的是,在CActive这个基类中,并没有任何实际的函数用来发布异步请求,我们自己必须编写这种函数,通常取名为StartL()。

2、 ()是个纯虚函数,必须实现该函数以提供未完成请求所需的功能。但是,需要注意:绝对不应该直接调用该函数,应该总是使用Cancel(),该函数调用 DoCancel(),同时确保设置必须的标志,从而表明请求已完成。DoCancel

3、 ()是原子操作,当它被活动规划器调度后,相同线程里,其他任何RunL()都不可以运行,直到这一RunL()完成并返回,因此该方法必须简短,否则,用户就会感到等待事件较长,手机好像死机了一样。RunL

4、 如果RunL()异常退出,则调用RunError()(由活动规划器调用),它为活动对象提供处理自身错误的机会。如果能够处理错误,RunError()就应该返回KErrNone;否则,它应该只是返回作为参数传递的错误码,在这种情况下,将错误传递到活动规划器的

上一页  1 2 3 4 5  下一页

Tags:Symbian 活动 对象

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