您的位置:首页 > 其它

Symbian进程间通信介绍--收藏

2011-04-11 14:00 162 查看
这里主要介绍了进程间传递请求和数据的术语和框架。主要有以下几个方面的API:
异步服务:提供了一个进程向其他进程请求服务的术语
C/S结构:提供了Symbian OS的客户端/服务器框架,一个程序可以通过该框架向多个程序提供服务
通告服务:提供了多种低水平服务,比如环境改变,进程消亡,向屏幕显示简单消息等。

下面详细介绍这三种API:

异步服务(Asynchronous Services):
提供了低水平和高水平的术语来完成一个线程/进程向另一个线程/进程请求服务。典型的客户端程序使用windowing,telephony之类的术语来访问系统服务器。这是一个基本的过程,而且在所有Symbian OS应用中很相似,所以将其封装成活动对象框架。
客户端程序经常请求访问其他线程或进程提供的服务。例如,大多数应用程序会请求系统窗口服务器进程来显示键盘输入。提供这样服务的进程或线程被称为异步服务提供者(asynchronous service provider)。

当调用异步服务器的方法返回时,只是一个请求被派遣了,在请求真正被完成时,服务器会通过信号机制来通知请求者。

下面的低水平异步服务处理展示了基本的异步服务概念;高水平的异步服务处理展示了Symbian OS框架封装了的异步服务处理。

1、低水平的异步服务处理
低水平的异步服务处理包含两个基本概念:异步请求状态和线程请求信号(semaphore)
异步请求状态
异步服务请求状态标识了向服务器请求的结束状态。当一个线程发出请求时,它会将异步请求状态作为参数,当服务器完成请求时,会在请求状态中存储一个成功或失败的代码。
异步请求状态使用类TRequestStatus。
线程请求信号
线程请求信号意为服务器通过信号告诉请求者已完成请求,客户端可以知道是哪个请求已完成,然后调用响应的函数来处理请求完成。
使用类User来传递信号、等待请求完成。

2、高水平异步服务处理
包含两个主要概念:活动对象和活动对象规划器
活动对象
活动对象包装了请求异步服务的一般行为和处理请求完成后的处理。异步服务器一般都会提供基于活动对象的接口来给客户端访问。
活动对象接口类为CActive。
活动规划器
一个使用异步服务的线程必须有一个循环来等待请求完成的信号。活动规划器包装了这个等待循环。所有GUI应用程序都提供了异步规划器,所以一个GUI应用程序就是一个活动对象的集合通过活动规划器来处理异步请求完成事件。
活动规划器接口类为CActiveScheduler。

C/S介绍
通过Symbian OS的C/S框架,程序可以给其他多个程序提供服务。服务器也可以处理多个客户端资源。
很多Symbian OS系统API使用C/S框架来提供服务,比如窗口服务器,文件服务器和消息服务器等。在一些情况下,这些API提供了客户端类在客户端代码中隐藏了接使用C/S框架。
这个API有四个关键概念:服务器(CServer2),会话(CSession,RSessionBase),子会话(RSubSessionBase)和消息(RMessage2,RMessagePtr2)。
一个服务器通过客户端定义的接口来为其他进程提供服务。客户端和服务器通过消息传递来通信。
现在,在出现下列需求时,我们一般首先C/S架构,而不是传统的共享内存方法
* 管理共享系统资源
* 异步服务
* the protection offered by running in a separate process from clients.

一个C/S实现包括了一个可执行的服务器程序,和包含客户端接口的DLL。

Server
这是服务器程序的中心类,它负责处理来自客户端的请求。相应类为CServer2。
Session
客户端和服务器通信的通道。客户端对应基本接口类为RSessionBase;相应的服务端会话基类为CSession2,如果服务器标识会话为可共享的,那么服务端会话可以在不同客户端线程间共享,它的实现定义了如何处理客户端消息。
Sub-session
当一个客户端需要同时多次使用一个服务器时,就需要使用Sub-session。例如,对文件服务器,每个打开的文件都通过单独的子会话来进行处理。
客户端的子会话接口类为RSubSessionBase。对应的服务端子会话类为CObjext、CObjectCon和CObjectIx。
Message
消息是客户端和服务器之间传递的信息。它包含了标识请求类型的代码,四个32位的关于每个参数类型、宽度和可访问性的数据。
客户端不能直接使用消息,需要使用TIpcArgs来对消息进行打包然后传递给服务器。服务器通过RMessage2来访问消息。

转自http://hi.baidu.com/richiechyi/blog

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: