深入活动对象2

        Symbian也是多任务操作系统,当然也要用进程、线程完成多任务处理。进程是程序的运行实例,有自己独立的数据空间。线程是进程的执行单元,一个进程 至少有一个主线程。多线程可以并发运行采用抢占式完成多任务处理。但是Symbian下不提倡使用多线程,因为Symbian系统是通过客户端/服务器结 构来提供对线程资源的访问,这就意味着访问线程需要与内核的服务器程序不断地进行通信,效率低。      
        在单线程内,配合使用活动对象+异步函数,完全可以模拟多线程并行运行。不同的是,这是一种非抢占式并行运行,即当前活动对象结束之前,其它活动对象不能 运行。       异步函数在执行后立即返回,继续执行它下面的代码。异步操作有后台继续执行,结束后通过信号量表示异步操作结束。同步函数必须函数内所有操作全部执行结束 后才能返回,执行下面的代码,否则就阻塞在那里。很显然,实现多任务并行运行必须使用异步函数。      
        活动对象是CActive的派生类,设立它的作用就是为了提供一个专门用来调用异步函数的类。因为这个类中专门设有回调函数,使异步函数结束后,能利用这 个回调函数进行尾处理。这个函数就是RunL()。在活动对象外面使用异步函数,只能截获信号量,不能直接进入某个回调函数。
       异步函数结束后,是如何进入到正确的回调函数中的呢?系统运行着一个活动调度器(CActiveSchedule),它能截获异步函数结束后发出的信号 量,并根据这个信号量,调用相应的RunL()。问题是如果CActiveSchedule截获了这个信号,但却找不到该调哪个活动对象的RunL()怎 么办?这时CActiveSchedule会抛出异常,这种状态叫信号游离,这种状况经常发生,所以使用活动对象应该避免这种情况发生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值