当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]最近看了一些进程间通讯的资料,基本上原理是一样的,在一个线程开一个全局的服务,另外一个可以通过全名字,或者部分名字查找这个服务,然后取得这个全局服务的内存地址,

最近看了一些进程间通讯的资料,基本上原理是一样的,在一个线程开一个全局的服务,另外一个可以通过全名字,或者部分名字查找这个服务,然后取得这个全局服务的内存地址,得到内存中的数据。

在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 共享内存中的数据取到了,当然也可以修改。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭