3

Open Cを使用してSymbianに移植しているマルチスレッドアプリでは、RFileを使用してデータをファイルに読み書きするオブジェクトがあります。このオブジェクトは異なるスレッドからアクセスされることになっています (スレッドセーフです) が、明らかに RFile オブジェクトは 1 つのスレッド内でしかアクセスできないという問題があります。別のスレッドが RFile オブジェクトを使用するとすぐに、KERN-EXEC 0 が返されます。

異なるスレッド間で RFile オブジェクトを共有する方法はありますか? アクティブ オブジェクトを使用できません。

4

3 に答える 3

3

2 番目の RFile ハンドルを作成します (secondFile と呼びましょう)。開かないでください。代わりに RFile::Duplicate(secondFile) を使用してください。その後、プロセス内のすべてのスレッドが secondFile ハンドルを使用できるようになります。

于 2008-10-21T22:16:52.303 に答える
1

RFs::ShareAuto() を使用するとうまくいくようです。

于 2008-10-23T09:39:49.507 に答える
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)
于 2010-01-12T13:08:19.190 に答える