WEB开发网
开发学院手机开发Android 开发 关于 RMsgQueue 类的使用 阅读

关于 RMsgQueue 类的使用

 2010-04-18 06:50:00 来源:WEB开发网   
核心提示:关于RMsgQueue类的使用RMsgQueue类是Symbian OS EKA2才提供的一个类,最近因为项目中要使用,关于 RMsgQueue 类的使用,为此对使用进行如下小结,因为RMsgQueue类只是一个封装好的内核资源类,为此创建就用了简单的CreateLocal函数,而且我们将其放在了AO的二阶段构造中,类

关于RMsgQueue类的使用

RMsgQueue类是Symbian OS EKA2才提供的一个类,最近因为项目中要使用,为此对使用进行如下小结。

因为RMsgQueue类只是一个封装好的内核资源类,类似于RSocket和RTimer类,要想使用它进行异步操作就必须对其用AO类来封装,从而来实现监听消息,在有消息过来时得到通知并根据消息内容进行相对应的处理。

那这个消息内容又该如何定义呢?我们可以参看下RMsgQueue类定义

template

class RMsgQueue : public RMsgQueueBase

{

public:

TInt CreateLocal(TInt aSize, TOwnerType aType=EOwnerProcess);

TInt CreateGlobal(const TDesC& aName, TInt aSize, TOwnerType aType=EOwnerProcess);

TInt Send(const T& aMsg);

void SendBlocking(const T& aMsg);

TInt Receive(T& aMsg);

void ReceiveBlocking(T& aMsg);

};

显然该类RMsgQueue也是Symbian的?模板类,具体消息内容可以根据需求自定义类型,即如果传递的消息足够简单则可以采用Tint类型来定义,考虑到我们的实际应用对消息内容进行如下定义

typedef enum _NetWork_Msg_Type

{

NetworkSocketCreate,

NetworkSocketConnect,

NetworkSocketSend,

NetworkSocketRecv,

NetworkSocketClose,

}NetWorkMsgType;

typedef struct _NetWork_Msg

{

NetWorkMsgType m_msgType;

TInt32 m_msgFd;

}NetworkMsg;

其中的NetworkMsg就是我们在这里使用的消息内容,其中的成员m_msgType 是NetWorkMsgType定义的枚举值,表示消息类型,另一个成员m_msgFd是我们跨线程传递一个Id值。

有了以上消息内容,我们就可以简单的来定义消息队列了

RMsgQueue g_NetWorkMsgQue;

如上已经实例化了一个RMsgQueue对象,但是RMsgQueue对象必须要像RTimer一样需要调用CreateLocal或者CreateGlobal才能创建起来,那我们在哪里创建它呢?这两个创建又有什么区别呢?由于RMsgQueue可以是全局的也可以是局部的,假如使用局部的,那么类的封装性较好,而且可以很好的跨进程使用,但是缺点是需要传递对象,此时创建就可以使用CreateGlobal。考虑到我们只在一个进程的不同线程间使用,同一进程的线程间可以共享资源(内存),所以这里我们就采用简单的全局变量来实现它,为此创建就用了简单的CreateLocal函数,而且我们将其放在了AO的二阶段构造中,详见示例代码。

1 2 3 4 5 6  下一页

Tags:关于 RMsgQueue 使用

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