WEB开发网
开发学院手机开发Symbian 开发 Symbian C++基础之活动对象(Active Objects) 阅读

Symbian C++基础之活动对象(Active Objects)

 2010-03-22 16:29:00 来源:WEB开发网   
核心提示:内核控制着线程调度,允许线程通过划分时间片(time-slice)去共享系统资源. 以前让更高优先级的线程抢占运行.内核调度器挂起当前的线程,其他线程被切换为当前线程时, 会发生上线文切换(context switch)(例如, 如果一个线程阻塞了,已经用完了它的时间片,或者更高优先级的线程要准备运行了). The c
内核控制着线程调度,允许线程通过划分时间片(time-slice)去共享系统资源. 以前让更高优先级的线程抢占运行.

内核调度器挂起当前的线程,其他线程被切换为当前线程时, 会发生上线文切换(context switch)(例如, 如果一个线程阻塞了,已经用完了它的时间片,或者更高优先级的线程要准备运行了). The context switch incurs a runtime overhead in terms of the kernel

scheduler and, if the original and replacing threads are executing in

different processes, the memory management unit and hardware caches.

在Symbian C++中, 活动对象是一个从CActive基础类继承下来的类. 它们的管理和调度由CActiveScheduler类来处理.

CActive

一个活动对象必须直接或者间谍地从CActive类进行继承. CActive定义在e32base.h中, CActive类是一个抽象类(abstract class),只有两个纯虚函数(pure virtual function) RunL() 和 DoCancel()

构造

在构造函数中,从CActive继承来的类,必须调用基类的保护的构造函数, 传递一个参数来设置活动对象的优先级. 如果线程一样,所有的活动对象必须有一个优先级,来决定他们如何被调度. 这个优先级只用来决定事件处理器运行的顺序, 而不是重新调度它们.

在类CAtive里面枚举TPriority定义了一组优先级的值。 一般而言, 应该使用CActive::EPriorityStandard(=0)的优先级,除非有更好的理由使用别的值.

在构造函数中, 活动对象应该也调用CActiveShedulerL::Add()来添加它自己到活动调度器中.

——————

CActiveScheduler::Add( this);

——————

发出请求

活动对象应该提供一个公用方法来发送请求到异步服务提供者, 然后把自己设置为活动的(以便活动调度器等待它完成). 这个方法的实现应该服从一个标准模式:

1. 检查未完成的请求(outstanding requests)

活动对象不能有超过1个的未完成的请求, 在尝试提交新的请求前, 活动对象必须检查,看是否已经在等待请求的完成. 如果是,有几种不同的方法来处理

—恐慌 这种情况只会在编程错误时才可能出现

—拒绝提交新的请求 尝试发出多个请求是合法的,但是会失败,知道原有的请求完成

—取消未完成当前请求,然后提交新的请求

Tags:Symbian 基础 活动

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