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

Symbian 活动对象概述

 2010-08-30 00:02:00 来源:WEB开发网   
核心提示:传统异步系统一般都用多线程来实现,但是多线程的轮询会浪费处理器周期,Symbian 活动对象概述,从而浪费电能,于是,4.由于RunL()是不可抢占的,所以必须尽可能简短,symbian平台采用活动对象的方法来实现异步操作,该机制是非抢占式的

传统异步系统一般都用多线程来实现,但是多线程的轮询会浪费处理器周期,从而浪费电能。

于是,symbian平台采用活动对象的方法来实现异步操作。该机制是非抢占式的,

优先级只用于当多个活动对象的任务同时完成时判断哪个先被处理。

实现这个异步模型,需要三个部分

1.活动规划器

2.活动对象

3.异步服务提供器

Symbian OS应用程序,一般一个进程只包含一个线程,每个线程一个活动规划器,

活动规划器管理同一线程中的多个活动对象(无论当前是否有请求服务),

异步服务提供器完成活动对象提出的异步请求。

活动对象封装:

代表请求状态的数据成员: iStatus;

异步服务提供器上的句柄:通常是R类对象的指针;

构造期间与服务提供器的连接;

发布(或重新发布)异步请求的函数:用户自定义;

请求完成时活动规划器调用的处理器函数:RunL();

删除未完成请求的函数(Cancel())

需要注意的要求有

1.iStatus是公有的,异步服务提供器将会改变这个值

2.发布请求时必须调用SetActive(),否则活动规划器将在搜索已完成的活动对象时忽略它,从而导致panic

3.DoCanel是一个纯虚函数,必须实现该函数以提供删除未完成请求所需的功能。但是绝对不能直接调用该函数,而总是应该调用 Cancel(),它会调用DoCancel(),同时确保设置必须的标志,从而表明请求已经完成(撤销)。另外绝对不要重写Cancel()函数,它有系统实现了大量的重要功能,并不是一个虚函数,但是需要你自己调用。这里优点绕,结合起来就是DoCancel需要自己实现但不需要自己调用,Cancel()需要自己调用但不需要自己实现。

4.由于RunL()是不可抢占的,所以必须尽可能简短,超过1/10秒程序灵敏度将会受到影响,而超过10秒的话系统将会产生ViewSrv11 Panic

Tags:Symbian 活动 对象

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