《Active Object技术讲解》PDF教学教案.pdf

《Active Object技术讲解》PDF教学教案.pdf

ID:51238651

大小:665.13 KB

页数:24页

时间:2020-03-22

《Active Object技术讲解》PDF教学教案.pdf_第1页
《Active Object技术讲解》PDF教学教案.pdf_第2页
《Active Object技术讲解》PDF教学教案.pdf_第3页
《Active Object技术讲解》PDF教学教案.pdf_第4页
《Active Object技术讲解》PDF教学教案.pdf_第5页
资源描述:

《《Active Object技术讲解》PDF教学教案.pdf》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ActiveObject技术讲解沈青海华清远见大纲vAO概述v活动规划器类CActiveSchedulerv活动对象基类CActivev常见的活动对象错误v总结及特别提示华清远见(1)异步系统v在现代计算中,异步系统非常流行,存在大量可用于实现异步的方式,其中Ø在抢占系统中使用多线程Ø协作式多任务华清远见(2)ActiveObject(AO)框架vAO框架是运行于一个线程内部的调度框架。v其基本思想就是把一个单线程分为多个时间片,来运行不同的任务。华清远见(3)多线程和AO框架的比较多线程活动对象v可

2、以被抢占v不可被抢占v上下文切换耗费v没有上下文切换CPU时间v由线程自己的AOv由操作系统调度框架调度v每个线程都有至vAO没有单独的少4KStackStackv操作系统还要分v只是一个Active配额外的资源记Object录线程华清远见(4)ActiveObject(AO)框架vAO框架是运行于一个线程内部的调度框架。v基本思想是把一个单线程分为多个时间片,来运行不同的任务。vAO框架包括CActiveScheduler和CActive(ActiveObject)v一个线程的所有的ActiveOb

3、ject都被安装在CActiveScheduler.vCActiveScheduler监控每个ActiveObject是否完成了当前任务华清远见大纲vAO概述v活动规划器类CActiveSchedulerv活动对象基类CActivev常见的活动对象错误v总结及特别提示华清远见(1)活动规划器的生命周期华清远见(2)活动规划器类CActiveScheduler(1)创建规划器:CActiveScheduler*scheduler=new(ELeave)CActiveScheduler;CleanupSt

4、ack::PushL(scheduler);CActiveScheduler::Install(scheduler);(2)运行规划器:CActiveScheduler::Start();(3)停止规划器:CActiveScheduler::Stop();华清远见大纲vAO概述v活动规划器类CActiveSchedulerv活动对象基类CActivev常见的活动对象错误v总结及特别提示华清远见(1)活动对象使用二阶段构造CExampleLoader::CExampleLoader(RFs&aFs,CE

5、lementList&aElementList,MCsvFileLoaderObserver&aObserver):CActive(EPriorityStandard){}voidCExampleLoader::ConstructL(constTDesC&aFileName){iFileName=aFileName;User::LeaveIfError(iFile.open(iFs,iFileName,EFileRead));User::LeaveIfError(iTimer.CreateLocal(

6、));CActiveScheduler::Add(this);}通过句柄RTimer和RFile链接到所需的两个异步服务器。必须将活动对象都添加到活动规划器中,并且只能添加一次。华清远见(2)启动活动对象voidCExampleLoader::Start(){TIntdelay=(iFileName.Size()%10)*100000;iTimer.After(iStatus,delay);SetActive();//将iActive设为Etrue}异步服务提供器(运行在另一线程或进程中)将通过完成下

7、面两件事来用信号通知线程(活动对象所属的线程)。(1)增加线程的信号量(这个信号量,一般情况用不到。只是当活动对象所属的线程被挂起时,通过增加信号量重新唤醒这个线程,而线程的挂起通过函数WaitForAnyRequest())。(2)将给定的TRequestStatus设置为不同于KRequestPending的值(如果一切运行良好,则很有可能是KErrNone)。华清远见(3)RunL()v该函数将执行大量任务:Ø决定下一次迭代应该做什么(加载数据或浪费时间)Ø检查最后一次迭代状态,并且将这个状态报

8、告给观察器Ø处理所有加载的数据v一般活动对象的这个RunL()方法希望完成上述的一项或几项工作。v在这里还可以再次调用Start(),也就是说可以再次发布服务请求。华清远见(4)在RunError()中处理错误v活动对象完全允许RunL()异常退出,结尾是“L”表明了这一点。v如果该函数确实异常退出,则它异常退出时的错误码将被传递RunError()。TIntCExampleLoader::RunError(TIntaError){iObserver.N

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。