在我使用 Open C 移植到 Symbian 的多线程应用程序中,我有一个使用 RFile 将数据读/写到文件的对象。该对象应该可以从不同的线程访问(它是线程安全的),但是显然 RFile 对象只能在一个线程中访问。只要另一个线程使用 RFile 对象,我就会得到一个 KERN-EXEC 0。
有没有办法在不同线程之间共享 RFile 对象?我不能使用活动对象。
在我使用 Open C 移植到 Symbian 的多线程应用程序中,我有一个使用 RFile 将数据读/写到文件的对象。该对象应该可以从不同的线程访问(它是线程安全的),但是显然 RFile 对象只能在一个线程中访问。只要另一个线程使用 RFile 对象,我就会得到一个 KERN-EXEC 0。
有没有办法在不同线程之间共享 RFile 对象?我不能使用活动对象。
创建第二个 RFile 句柄(我们称之为 secondFile)。不要打开它。改用 RFile::Duplicate(secondFile) 。之后,您进程中的所有线程都应该能够使用 secondFile 句柄。
使用 RFs::ShareAuto() 似乎有效。
您正在寻找以下组合:
将已经打开的文件从服务器传输到客户端
RFile::TransferToClient(const RMessage2 &,TInt)const
将已打开的文件传输到另一个进程
RFile::TransferToProcess(RProcess &,TInt,TInt)const
将已打开的文件传输到服务器
RFile::TransferToServer(TIpcArgs &,TInt,TInt)const
在第一个线程/服务器/进程和
允许服务器采用客户端已经打开的文件
RFile::AdoptFromClient(const RMessage2 &,TInt,TInt)
允许服务器采用来自客户端进程的已打开文件
RFile::AdoptFromCreator(TInt,TInt)
允许客户端采用来自服务器的已打开文件
RFile::AdoptFromServer(TInt,TInt)
.. 在第二。这有效地复制了文件句柄,允许两者都使用它。
如果在同一进程中的线程之间传输,那么您可以更简单地使用
RFile::Duplicate(const RFile &,TOwnerType)