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

时间:2008-10-21 05:21:16

标签: multithreading symbian

在我使用Open C移植到Symbian的多线程应用程序中,我有一个使用RFile读取/写入数据到文件的对象。该对象应该从不同的线程访问(它是线程安全的),但是存在一个问题,显然RFile对象只能在一个线程内访问。一旦另一个线程使用RFile对象,我就得到一个KERN-EXEC 0.

有没有办法在不同的线程之间共享RFile对象?我无法使用Active Objects。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

使用RFs :: ShareAuto()似乎有效。

答案 2 :(得分:0)

您正在寻找以下组合:

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

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

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

    RFile::TransferToServer(TIpcArgs &,TInt,TInt)const
    
  4. 第一个线程/服务器/进程中的

    1. 允许服务器采用已打开的文件  客户端

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

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

      RFile::AdoptFromServer(TInt,TInt)
      
    4. ..在第二个。这有效地复制了文件句柄,允许两者都使用它。

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

      RFile::Duplicate(const RFile &,TOwnerType)