在主线程与子线程的通信上可以使用RMsgQueueBase,本来是很简单的,之所以笔记一下,是因为有个理解性的问题。
发送数据:
RMsgQueueBase msgQueue;
iMsg = _L8("close").AllocL();
User::LeaveIfError(msgQueue.OpenGlobal(_L("GlobalMsg")));
msgQueue.SendBlocking(iMsg,9);
接收数据:
HBufC8* msg = HBufC8::NewL(100);
iMsgQueue.ReceiveBlocking(msg,100);
SendBlocking 和 ReceiveBlocking要求分别给出2个参数, 数据内存地址与长度。所以这里如果使用HBufC8的话要在长度的基础上加上4。原因是描述符在内存结构上前面有四个字节的数据类型。所以这里如果传送数据的参数如果写HBufC8,长度写5的话,数据接收只能接收到“c”,是不完整的,长度要在数据长度的基础上加上4。