在两个线程之间共享Symbian的RFile

3
在使用Open C将多线程应用程序移植到塞班系统时,我有一个对象使用RFile读写文件数据。该对象应该可以从不同的线程中访问(它是线程安全的),但是问题在于,显然RFile对象只能在一个线程中访问。一旦另一个线程使用RFile对象,我就会收到KERN-EXEC 0错误。
是否有办法在不同的线程之间共享RFile对象?我不能使用Active Objects。
3个回答

3

创建第二个RFile句柄(我们称之为secondFile)。不要打开它。使用RFile::Duplicate(secondFile)。此后,您的进程中的所有线程都应该能够使用secondFile句柄。


1

使用 RFs::ShareAuto() 似乎可以正常工作。


0
你正在寻找以下组合:

  1. 将服务器中已打开的文件传输到客户端

    RFile::TransferToClient(const RMessage2 &,TInt)const
    
  2. 将已打开的文件传输到另一个进程

    RFile::TransferToProcess(RProcess &,TInt,TInt)const
    
  3. 将已打开的文件传输到服务器

    RFile::TransferToServer(TIpcArgs &,TInt,TInt)const
    

在第一个线程/服务器/进程中

  1. 允许服务器从客户端中采用一个已经打开的文件

    RFile :: AdoptFromClient(const RMessage2 &,TInt,TInt)
    
  2. 允许服务器从客户端进程采用已经打开的文件

    RFile :: AdoptFromCreator(TInt,TInt)
    
  3. 允许客户端从服务器中采用已经打开的文件

    RFile :: AdoptFromServer(TInt,TInt)
    

在第二个中。这实际上是复制文件句柄,使两者都可以使用它。

如果在同一个进程中的线程之间传输,则可以更简单地使用

RFile::Duplicate(const RFile &,TOwnerType)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接