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

关于 RMsgQueue 类的使用

 2010-04-18 06:50:00 来源:WEB开发网   
核心提示:}void SocketConnect(TInt32 aFd){}void CMessageQueueAO::RunL(){if (iStatus.Int() == KErrNone){//接收数据NetworkMsg msgfrmq;g_NetWorkMsgQue.Receive(msgfrmq);switch(ms

}

void SocketConnect(TInt32 aFd)

{

}

void CMessageQueueAO::RunL()

{

if (iStatus.Int() == KErrNone)

{

//接收数据

NetworkMsg msgfrmq;

g_NetWorkMsgQue.Receive(msgfrmq);

switch(msgfrmq.m_msgType)

{

case NetworkSocketCreate:

LockMutexRaw(g_NetMgrMutex);

SocketCreate(msgfrmq.m_msgFd);

UnlockMutexRaw(g_NetMgrMutex);

break;

case NetworkSocketConnect:

LockMutexRaw(g_NetMgrMutex);

SocketConnect(msgfrmq.m_msgFd);

UnlockMutexRaw(g_NetMgrMutex);

break;

case NetworkSocketRecv:

LockMutexRaw(g_NetMgrMutex);

SocketRecv(msgfrmq.m_msgFd);

UnlockMutexRaw(g_NetMgrMutex);

break;

case NetworkSocketClose:

LockMutexRaw(g_NetMgrMutex);

SocketClose(msgfrmq.m_msgFd);

UnlockMutexRaw(g_NetMgrMutex);

break;

default:

break;

}

//Using ReceiveBlocking()

// msgqueue.ReceiveBlocking(msgfrmq);// 如果使用blocking 可能那边要发送两次消息这边才会跑哦

}

g_NetWorkMsgQue.NotifyDataAvailable(iStatus);//开启下一个消息的接收

SetActive();

}

void CMessageQueueAO::DoCancel()

{

if( IsActive() )

{

g_NetWorkMsgQue.CancelDataAvailable();

}

}

TInt CMessageQueueAO::RunError(TInt aError)

{

return aError;

}

封装完这个AO,大功就可以完成了,将这个AO放在一个独立的线程中创建起来,并调用StartMessageGet让这个线程始终监听消息。外界线程通过调用g_NetWorkMsgQue.Send(msgfrmq)来给这个AO线程发消息并得到相应的处理。在这里我就不过多展开了,因为要涉及两个线程间的操作,篇幅就太大了。

在结束小结的时候,我想着如何实现IPC,这样的话,这个小结就完整了,碰巧,在逛博客的时候,发现一篇博文总结得很好,而且言简意赅,为此转载与下面,跟大家一起分享,博文原址http://blog.sina.com.cn/s/blog_63b4ee0d0100g3xc.html

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

Tags:关于 RMsgQueue 使用

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