`
venus585625
  • 浏览: 253179 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转载:Windows的消息循环 与 Symbian的活动对象调度器

阅读更多
假设:

        我们要写一个程序。这个程序运行时,是只有一个线程的进程。它的入口点函数为main()。

那么:

        当main()中的代码运行完时,程序就结束运行了。如何确保在用户选择退出前,程序一直运行? Windows中通过"消息循环"达到这种目的,而Symbian则使用"活动对象调度器"。

    Windows中,GetMessage()会从线程的消息队列中不断取消息,直到取得WM_QUIT消息时,消息循环结束,程序就可以正常退出了。

    而在Symbian中,程序框架中没有使用"消息循环机制",而是使用"活动对象机制"。活动对象调度器CActiveScheduler的Start()相当与开始消息循环,CActiveScheduler的Stop()相当与停止消息循环。CActiveScheduler::Start()不是随随便便就可以调用的,调用它前必须确保:至少有一个活动对象(CActive)加入到了该活动对象调度器(CActiveScheduler)中,并发布了异步请求。这样,在异步请求完成后,活动对象的RunL()就会被调用,在这个RunL()中又可以发布新的异步请求,实现程序的不断运行,直到CActiveScheduler::Stop()被调用。

    当执行到CActiveScheduler::Start()时,其后的代码不会被立即执行,看起来就像CActiveScheduler::Start()是一个阻塞调用。那么要阻塞到什么时候?阻塞直至CActiveScheduler::Stop()被调用,并且调用CActiveScheduler::Stop()的RunL()中的代码跑完。CActiveScheduler::Start()执行完毕返回的时候,也就是程序该结束的时候了(非多线程时)。

    "消息循环"和"活动对象"这两种机制都实现了所谓的"纤程(把一个线程分成多段)"。"消息循环"中对每个消息的处理过程可以视为一个"纤程",而"活动对象"中的每个RunL()也可视为"纤程"。两者都实现了:上一个处理过程(函数)退栈以后,再开始下一个处理过程(函数)的调用。

    若要在Symbian中使用消息机制,可以通过将定时器或RMsgQueue等封装成活动对象来实现,除非谁愿意写个不断轮询的循环。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/anjgao/archive/2009/05/04/4145135.aspx
分享到:
评论

相关推荐

    活动对象与活动调度器的文档

    活动对象与活动调度器是Symbian OS操作系统中实现非抢先式多任务处理的关键机制。在Symbian OS中,活动对象(Active Objects)和活动调度器(Active Scheduler)一起工作,提供了一种比传统的多线程编程更简洁、CPU...

    symbian活动对象详解

    1. **调度与同步**:活动对象通过系统调度器进行调度,保证在适当的时间被激活。同步问题主要涉及如何确保多个活动对象之间的协调,防止数据竞争和死锁。 2. **状态管理**:每个活动对象都有自己的状态,如等待、...

    symbian活动对象例子

    4. **调度器**:Symbian提供了CActiveScheduler类,它负责调度活动对象的工作。你可以将你的活动对象注册到调度器中,以便在系统空闲时进行处理。 5. **错误处理**:活动对象通过CActive的SetError方法来设置错误...

    Symbian编程总结-基础篇-活动对象正解

    调度器会定期检查所有活动对象,一旦发现有对象的状态不再表示等待(即不再为ERequestPending),就执行相应的回调。 总之,Symbian的活动对象机制提供了一种高效、灵活的方式来处理异步操作,它确保了主应用程序...

    Symbian 活动对象.doc

    在Symbian系统中,活动对象(Active Object)和活动调度器(Active Scheduler)是实现非抢先式多任务的关键组件,尤其在单线程环境中,它们提供了高效、简洁的编程模型。 1. **活动对象**(Active Object) - 活动...

    symbian 活动对象 例子

    - **消息队列与调度器**:每个活动对象都有一个与之关联的消息队列,用于接收和处理来自其他线程或系统的服务请求。调度器负责将消息从源对象传递到目标活动对象的队列。 2. **活动对象的设计模式**: - **构造与...

    symbian中活动对象的一些简单的使用

    活动对象并不实际创建线程,而是将多个并发执行的任务在一个线程中管理,通过活动规划器(ActiveScheduler)进行调度。 首先,让我们理解一下基本概念: 1. CActive对象:这是Symbian中的一个基类,用于处理延迟...

    Symbian OS中的活动对象的使用

    系统中的活动调度器(CActiveScheduler)负责管理活动对象,当异步函数完成时,调度器会检查所有注册的活动对象,如果发现其状态改变,就会调用相应的RunL方法。 创建和使用活动对象的步骤如下: 1. 创建活动调度...

    Symbian OS 之活动对象

    #### 一、Symbian OS 活动对象的引入背景与意义 Symbian OS 是一款专为移动设备设计的多任务操作系统,其核心特性之一便是通过引入活动对象(Active Objects)的概念,以实现高效且灵活的事件处理机制。这一设计...

    symbian 活动对象与多线程区别

    标题中的“Symbian活动对象与多线程区别”是一个关于操作系统中并发执行机制的讨论,特别是针对Symbian操作系统的特性。Symbian是一种已不再广泛使用的移动操作系统,但它的设计思想对于理解多线程和活动对象的概念...

    symbian 0s之活动对象

    当异步服务完成时,会触发一个事件,活动调度器检测到事件后,将调用相应活动对象的 `RunL()` 函数来处理。由于 `RunL()` 在执行期间不会被抢占,因此它是一个原子操作,保证了处理过程的完整性。 活动对象之间的...

    Symbian 多任务下载的活动对象实现

    此外,由于活动对象是基于消息驱动的,因此它与UI交互更加自然,易于实现用户反馈。 总结来说,Symbian中的多任务下载不依赖于多线程,而是利用活动对象机制,通过将任务划分为可调度的事件处理,实现了异步、并发...

    symbian 线程和活动对象一个极好的实例

    活动对象并不直接运行在单独的线程上,而是通过消息队列和调度器来协调。当一个活动对象接收到一个请求时,它会将处理工作放入操作队列,然后返回,允许其他任务继续执行。当CPU资源可用时,调度器会调用活动对象的...

    symbian活动对象

    当异步操作结束,系统中的活动调度器(CActiveSchedule)捕获到信号量后,会调用相应活动对象的RunL()函数进行后续处理。这样,即使在没有多线程的情况下,也能实现类似多任务并行的效果。 总结来说,Symbian中的...

    一个使用活动对象接受和处理键盘事件的例子

    在Symbian操作系统中,活动对象(Active Object)是一种核心机制,用于管理异步操作和时间片调度。本文将深入探讨如何使用活动对象来接受和处理键盘事件,这对于理解和开发Symbian平台上的应用程序至关重要。 首先...

    活动对象3 张锦锋Symbian讲座

    【标题】"活动对象3 张锦锋Symbian讲座" 涉及的主要知识点是Symbian操作系统以及与之相关的技术讲座。Symbian是一个历史悠久的移动操作系统,尤其在2000年代中期至晚期,它曾是智能手机市场的主导平台之一,广泛应用...

    活动对象2 张锦锋Symbian讲座

    【标题】"活动对象2 张锦锋Symbian讲座" 暗示这是一个与Symbian操作系统相关的技术讲座,由专家张锦锋主持。Symbian是历史上流行的一款智能手机操作系统,尤其在2000年代中期至晚期,它在全球范围内广泛应用于诺基亚...

    symbian cative

    根据提供的文件信息,我们可以深入探讨Symbian操作系统中的CActive机制以及消息循环处理方式。Symbian是一款专为移动设备设计的操作系统,以其高效的资源管理而闻名。在Symbian中,CActive类及其相关机制是实现异步...

    Symbian OS课件(10)

    2. **调度和同步**:Symbian OS的调度器负责分配时间片给活动对象,确保每个对象都有机会执行。活动对象间的同步通过事件或信号量来实现,避免了多线程环境中的竞态条件。 3. **消息队列**:每个活动对象都有自己的...

    Symbian课件.rar

    2. **调度器**:活动对象由调度器管理,负责将任务分发到合适的线程执行,确保系统资源的均衡使用。 3. **事件循环**:每个线程都有一个事件循环,活动对象的请求会被放入事件队列,等待执行。 4. **回调函数**:当...

Global site tag (gtag.js) - Google Analytics