symbian活动对象

symbian活动对象

ID:37898402

大小:104.00 KB

页数:15页

时间:2019-06-02

symbian活动对象_第1页
symbian活动对象_第2页
symbian活动对象_第3页
symbian活动对象_第4页
symbian活动对象_第5页
资源描述:

《symbian活动对象》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Symbian编程总结-基础篇-活动对象正解(1)-理解活动对象ZZSymbianOS中的活动对象的使用无疑是最基础的、最频繁的、最重要的。什么是活动对象呢?大家学习一个新的事物时,总是会将这个新的事物与自己认知的事物相比较,从而达到快速学习的目的。我开始学习Symbian的时候,我查看很多Symbian书籍、网上很多Symbian教程都将活动对象与多线程联系到一起,我也总是会把活动对象想象成一个线程。然而,经过了更深入的接触,我发现并不像我想象的那样。现在,我在此向你保证:活动对象和多线程没有任何关系!不要拿平时做多线程的思想去理解活动对象!comments:废话,如果是的话,

2、为什么叫活动对象这个新词呢,还不如就叫thread来的方便,所以啊,显然不是。大家都知道,process之间的切换是有overhead的,为了提高performance,人们就搞了thread来,thread一下子提高了不少性能,但是呢,在symbianos只主要的用在mobiledevice的,RAM小,CPU是ARM7/9只有300M左右,所以resource就显得更相当的宝贵和重要了,一个thread在内核中大概需要4KByte的空间开销,在用户空间有8KB用于程序栈的空间开销,而AO只需要几百个Byte而已,甚至更小,所以很帅气吧~活动对象可以按照以下步骤这么理解:1,S

3、ymbianOS中提供了很多异步函数,这些异步函数大多部分都是基于“服务器-客户端”架构的。这里与win32api中的函数有很大的不同。如:win32中,CSocket::Receive(是recv而不是WSARecv)为同步函数,线程阻塞在Receive处,直到套接字接收到了网络流才返回。SymbianOS也有类似的函数,RSocket::Recv,但是此函数是一个异步函数,线程不会阻塞在Recv处而会继续执行。comments:其实,Symbian-OS是一个严重的C/S架构的系统,很多的service都是通过server来完成的,资源都是server来给client统一集中

4、管理的。2,如何区分Symbian中的函数哪些是同步的哪些是异步的?很简单:看函数内是否包含类型为TRequestStatus的形参,如果有则函数为异步函数。如RSocket::Recv的函数原型为:IMPORT_CvoidRecv(TDes8&aDesc,TUintflags,TRequestStatus&aStatus);3,参数aStatus为一个状态位,初始值为ERequestPending(值为1),它意味着用户请求的操作是否执行完毕。如:我们调用异步函数RSocket::Recv请求接收网络流,Recv函数会直接返回。当“接收”网络流的过程完毕后,aStatus会变为

5、EActive,所以我们只要监视aStatus是否不为ERequestPending就可以知道“接收”是否完成了。4,我们可以使用以下伪代码完成以上所述操作:TRequestStatusstatus(KRequestPending);RSocket::Receive(aDesc,flags,status);for(;;){if(status!=KRequestPending)break;}//此处我们已经通过RSocket::Recv完成了类似CSocket::Receive的同步的工作5,SymbianOS不建议我们使用以上方法,它建议我们使用异步方法,而不要使用我们这种方法去

6、强制同步,活动对象就是帮我们做这件事情。活动对象体系帮我们监视aStatus的值,只要aStatus!=ERequestPending,他就会以事件的方式通知我们,告诉我们“Socket已经接收完毕,你可以去取数据了!”,活动对象就是干这事的。comments:其实真正的不是这样的,是异步serviceprovider在request完成的时候会把请求者的iStatus的状态改为KErrNone,然后AS会检测到这个事件,从来调用相应的AO来做后续的事情。6,总结一下:系统中有一个“活动调度器”,我们建立一个“活动对象ao1”,将该对象与某个系统中的异步函数绑定,然后将该活动对象

7、注册到“活动调度器”中,“活动调度器”会等待异步函数返回的“完成”消息。收到完成消息后,调度器遍历所注册的活动对象,如果发现status!=KRequestPending则找到该status对应的“活动对象ao1”,调用其中的RunL方法,以事件的方式告知我们异步函数已经执行完成。在下一节我会介绍如何使用活动对象。Symbian编程总结-基础篇-活动对象正解(2)-使用活动对象zz在上一节里我们已经大致了解了活动对象的基本概念,要使用活动对象机制,需要用到活动对象、活动调度器、异

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

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

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