2008-10-21 30 views
3

我正在使用Open C移植到Symbian,我有一個使用RFile來讀/寫數據到文件的對象。這個對象應該是從不同的線程訪問的(它是線程安全的),然而存在的問題是顯然RFile對象只能在一個線程內訪問。只要另一個線程使用RFile對象,我得到一個KERN-EXEC 0.在多線程應用程序中分享Symbian的RFile

有什麼辦法在不同線程之間共享RFile對象嗎?我無法使用活動對象。

回答

3

創建第二個RFile句柄(我們稱其爲secondFile)。不要打開它。改爲使用RFile :: Duplicate(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. 允許服務器採用al從 客戶端進程

    RFile::AdoptFromCreator(TInt,TInt) 
    
  3. 準備打開的文件允許客戶端從服務器

    RFile::AdoptFromServer(TInt,TInt) 
    

採用一個已經打開的文件。在第二位。這有效地複製了文件句柄,以允許它們使用它。

如果在同一進程的線程之間傳遞,那麼你可以更簡單地使用

RFile::Duplicate(const RFile &,TOwnerType)