Symbian 之活动对象
2010-04-20 16:03:00 来源:WEB开发网一、概述:
Symbian OS是一个多任务的操作系统,那么为了实现多任务,同时使系统能够快速响应,高效的进行事件处理,并减轻应用程序员的工作负担(申请大多数耗时的操作(例如文件系统)由服务提供器来完成,服务提供器完成程序员提交的请求后,将会返回给程序员一个成功或失败的信号。), Symbian OS特意引入了活动对象的概念。
服务提供器API具有函数的异步和同步版本,供客户应用程序使用。所谓同步是指,客户提交请求后,处于等待状态,等待服务提供器返回成功或失败的信号后,然后在进行其他操作;所谓异步是指,请求完成,即返回信号之前,调用者也许会继续执行其他的处理,或者只是简单的等待。在这里的等待,也可以称为“阻塞”,信号就是一个事件,我们的代码就是事件驱动的。为了实现多任务,一般我们使用异步API。
一般操作系统为了实现多任务,往往使用多线程实现,当然,Symbian也是支持多线程的。但是,在同一个线程中运行的活动对象之间进行切换的代价要比线程上下文的切换代价低,这使得对于各种资源比较紧张的Symbian OS来说,使得活动对象更适合事件驱动多任务。
注意:
(1)线程间上下文切换和同一线程的活动对象之间传递控制权,在速度上的差别可能会有10倍之差,另外,一个线程大约在内核中有4KB的空间开销,在用户空间上有8KB的用于程序栈的空间开销,而一个活动对象的开销可能只有几百字节,甚至更小。
(2)虽然在一个线程内的活动对象是非抢占式地协同运行的,但在Symbian中,它们所在的线程确是抢占式调度的。
二、概念:
一个活动对象必须派生自基类CActive
class CActive : public CBase
{
public:
enum Tpriority
{
EPriorityIdle = -100;
EPriorityLow = -20;
EPriorityStandard = 0;
EPriorityUserInput = 10;
EPriorityHigh = 20;
}
public:
IMPORT_C ~CActive ();
IMPORT_C void Cancel ();//删除未完成请求的函数
……
IMPORT_C void SetPriority (TInt aPriority);
Inline TBool IsActive () const;
……
protected:
IMPORT_C CActive (TInt aPriority);
更多精彩
赞助商链接