最近看了一些进程间通讯的资料,基本上原理是一样的,在一个线程开一个全局的服务,另外一个可以通过全名字,或者部分名字查找这个服务,然后取得这个全局服务的内存地址,得到内存中的数据。
在symbian上有RChunk,RTread等类,但是在3rd fp1上取消了RTread的Read和Write方法,所以只能用RChunk类了,调用方法如下:
一个线程启动服务:
_LIT(KChunkName,"xn Globla Chunk");
TInt rc=iChk.CreateGlobal(KChunkName,0x1000,0x5000);
//取得共享内存地址
TUint8* uid=iChk.Base();
HBufC* buf=HBufC8::NewL(255);
buf->Des().Copy(_L8("123456"));
//uid=&(iHbuf->Des()[0]);
//将数据放入到共享内存中
TPtrC8 ptr;
Mem::Copy(uid,(TAny *)buf->Des().Ptr(),buf->Length());
//服务线程ok
另外线程:
_LIT(KChunkName,"xn Globla Chunk");
RChunk chk;
chk.OpenGlobal(KChunkName,0);//第一个参数指定了全局内存块的名称,第二个参数用于说明块是为只读(1)还是可写的(0)
TUint8* uid=chk.Base();
TPtrC8 ptr;
//Mem::Copy(uid,(TAny *)iHbuf->Des().Ptr(),iHbuf->Length());
ptr.Set( (const TUint8*)uid , chk.Szie());
//ok 共享内存中的数据取到了,当然也可以修改。