Symbian 操作系统中的线程和进程
2010-03-18 20:57:00 来源:WEB开发网数据的传输是通过拷贝数据来完成的,RThread提供了方法返回在它地址空间内一个 descriptor的长度及最大允许长度。
a>读取另个线程所提供的 descriptor
void ReadL(const TAny* aPtr,TDes8& aDes,TInt anOffset) const;
void ReadL(const TAny* aPtr,TDes16 &aDes,TInt anOffset) const;
这里ReadL()方法从另一个线程的descriptor(由 aPtr所指)中拷贝一组数据,传递到当前线程的descriptor(由aDes所指)。
aPtr指针必须指向一个在RThread句柄所指线程的地址空间中有效的descriptor。
从源descriptor中的内容是从anOffset位置那里开始拷贝到目的descriptor(aDes)的。
b> 向另个线程写入descriptor
void WriteL(const TAny* aPtr, const TDesC8& aDes, TInt anOffset) const;
void WriteL(const TAny* aPtr, const TDesC16& aDes, TInt anOffset) const;
用这个方法将当前线程descritor(aDes)所提供的数据都拷贝在另一个线程(aPtr所指)的descriptor中。这里 anOffset参数设定了目标descriptor的初始化拷贝位置。
aPtr 为线程地址空间内有效的可修改descriptor。
如果拷贝进去的数据长度超过目标descriptor的最大长度,则函数会发生异常。
c>Descriptor 帮助函数
TInt GetDesLength(const TAny* aPtr) const;
TInt GetDesMaxLength(const TAny* aPtr) const;
这里RThread的GetDesLength()方法可以返回aPtr所指向的descriptor长度。这里descriptor必须为RThread句柄所指定的线程的地址空间中。
RThread的 GetMaxDesLength()方法返回aPtr所指向descriptor的最大长度。descriptor也应在RThread句柄所指的线程地址空间中。
建议在ReadL()和WriteL()等方法前使用这些函数。
4)线程局部存储(TLS)
Symbian操作系统是不允许在DLL中出现可写静态变量的。然而每个DLL中每个线程都会分配一个32位字符空间。这个字符用来存放一个指向数据结构或类示例的指针。分配和释放这些资源可在例如DLL的入口函数E32Dll中处理。
另一个使用线程局部存储的示例为保存指向类示例的指针,这样静态回调函数可以访问与线程相联系的该对象。当我们处理自定义异常处理模块时是很有用的。
赞助商链接