symbian進(jìn)程間內(nèi)存共享
最近看了一些進(jìn)程間通訊的資料,基本上原理是一樣的,在一個(gè)線程開一個(gè)全局的服務(wù),另外一個(gè)可以通過全名字,或者部分名字查找這個(gè)服務(wù),然后取得這個(gè)全局服務(wù)的內(nèi)存地址,得到內(nèi)存中的數(shù)據(jù)。
在symbian上有RChunk,RTread等類,但是在3rd fp1上取消了RTread的Read和Write方法,所以只能用RChunk類了,調(diào)用方法如下:
一個(gè)線程啟動(dòng)服務(wù):
_LIT(KChunkName,"xn Globla Chunk");
TInt rc=iChk.CreateGlobal(KChunkName,0x1000,0x5000);
//取得共享內(nèi)存地址
TUint8* uid=iChk.Base();
HBufC* buf=HBufC8::NewL(255);
buf->Des().Copy(_L8("123456"));
//uid=&(iHbuf->Des()[0]);
//將數(shù)據(jù)放入到共享內(nèi)存中
TPtrC8 ptr;
Mem::Copy(uid,(TAny *)buf->Des().Ptr(),buf->Length());
//服務(wù)線程ok
另外線程:
_LIT(KChunkName,"xn Globla Chunk");
RChunk chk;
chk.OpenGlobal(KChunkName,0);//第一個(gè)參數(shù)指定了全局內(nèi)存塊的名稱,第二個(gè)參數(shù)用于說明塊是為只讀(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 共享內(nèi)存中的數(shù)據(jù)取到了,當(dāng)然也可以修改。