WEB开发网
开发学院手机开发Symbian 开发 Symbian OS中的Client/Server机制分析 阅读

Symbian OS中的Client/Server机制分析

 2010-09-06 08:10:00 来源:WEB开发网   
核心提示:2,深入Symbian 里的R类到底是啥?基本上所有R类都包含一个指向kernel-side object的handle,Symbian OS中的Client/Server机制分析(2),这个handle是一个整数!通过这个整数,在DObjectIx这个容器中可以索引到R类指向的对象,从客户线程接受请求,然后把这些请求

2,深入

Symbian 里的R类到底是啥?基本上所有R类都包含一个指向kernel-side object的handle,这个handle是一个整数!通过这个整数,在DObjectIx这个容器中可以索引到R类指向的对象,这些对象都是从DObject派生出来的,具有引用计数的功能!当user-side的R类调用Close方法后,对应的计数减1,到0时,就会自动析构内核的对象。

那么内核是如何把一个handle的32位整数解析成一个指向内核对象的指针的呢?

struct SDObjectIxRec

{

TInt16 instance;

TInt16 uniqueID;

DObject* obj;

};

这些指针通过SDObjectIxRec包装,放到DObjectIx的数组中,每一个DProcess或者DThread都有一个这样一个数组!(所以,当你创建一个R类的时 候需要你指明是thread范围的还是process范围的,他们会被放到不同的地方)。

1.根据BIT30看这个handle是存在thread里还是process的DObjectIx里

2.根据这个handle的BIT0-14来判断这个handle真的在DObjectIx里,数组不越界

3.根据BIT0-14获取这个index对应的SDObjectIxRec

4.根据BIT16-29和获得SDObjectIxRec的instance比对

5.如果一致就无措,这些操作可能会需要NKern::LockSystem()

6.获得SDObjectIxRec的obj指针

三,相关类的分析

CServer2 是一个AO,从客户线程接受请求,然后把这些请求分发到相应的服务器端的客户session。它可以利用客户线程请求来创建服务器端的客户线程。

/**

Abstract base class for servers (version 2). A server must define and implement a derived class. (Note that this class should be used instead of CServer)

*/

class CServer2 : public CActive

{

public:

IMPORT_C virtual ~CServer2() =0;

IMPORT_C TInt Start(const TDesC& aName);

IMPORT_C void StartL(const TDesC& aName);

IMPORT_C void ReStart();

/**

Gets a handle to the server.

Note that the RServer2 object is classified as Symbian internal, and its member functions cannot be acessed. However, the handle can be passed to the

上一页  1 2 3 4 5 6 7  下一页

Tags:Symbian OS Client

编辑录入:coldstar [复制链接] [打 印]
赞助商链接