最近看了一些進程間通訊的資料,基本上原理是一樣的,在一個線程開一個全局的服務,另外一個可以通過全名字,或者部分名字查找這個服務,然后取得這個全局服務的內存地址,得到內存中的數據。
在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 共享內存中的數據取到了,當然也可以修改。