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

关于 RMsgQueue 类的使用

 2010-04-18 06:50:00 来源:WEB开发网   
核心提示:如何理解进程间通信?先用一个通俗的例子来解释:比如我们需要实现这样一种模式,应用由进程A与进程B两部分组成,关于 RMsgQueue 类的使用(5),A有UI,负责用户交互;B没有UI,消息是通过消息缓冲而在进程之间相互传递的,RMsgQueue是3版提供的比较好的与事件机制融合的技术, 2版只能使用其它传统的, 信号

如何理解进程间通信?

先用一个通俗的例子来解释:比如我们需要实现这样一种模式,应用由进程A与进程B两部分组成,A有UI,负责用户交互;B没有UI,完全后台运行,A与B之间可以相互通信。就如彩信的模式,彩信到达后后台下载,下载完给出提示信息(即用户界面),阅读彩信再激活“信息”程序。

进程通信即两个并行进程可以通过互相发送消息进行合作,消息是通过消息缓冲而在进程之间相互传递的。

RMsgQueue是3版提供的比较好的与事件机制融合的技术, 2版只能使用其它传统的, 信号量, 共享内存等技术.

解决方案:

让我们来看代码:

Server

void CP2PServer::ConstructL()

{

//创建

iMsgQueue.CreateGlobal(KGLobalName, KNumberOfSlots, KMessageLength, EOwnerProcess);

CActiveScheduler::Add( this); // Add to scheduler

iMsgQueue.NotifyDataAvailable( iStatus );//开始监听消息

SetActive(); // Tell scheduler a request is active

}

void CP2PServer::RunL()

{

if (iStatus.Int() == KErrNone)

{

//接收数据

TRAPD(error,iMsgQueue.Receive( &str_SendData, KMessageLength));

if(error==KErrNone)

{

iObserver->HandleMessageReceiveL(str_SendData.DataBuf.Left(str_SendData.DataLength));

}

}

}

Client

void CP2PClient::ConstructL()

{

//创建

iMsgQueue.OpenGlobal(KGLobalName, EOwnerProcess);

}

//发送消息

void CP2PClient::SendMessageL(const TDesC8& aSendMessage)

{

STR_SENDDATA temp;

temp.DataLength = aSendMessage.Length();

temp.DataBuf.Copy(aSendMessage);

iMsgQueue.Send(&temp, KMessageLength);

}

就一些疑难问题解决如下:

B线程创建一个“东东”,名字为KGLobalName,并且B线程开启监控消息, A线程在需要时使用带KGLobalName参数的OpenGlobal函数打开同名, 然后发送消息出来,

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

Tags:关于 RMsgQueue 使用

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