Поделитесь Symbian RFile между двумя потоками

в многопоточном приложении, которое я переношу на Symbian с помощью Open C, у меня есть объект, который использует RFile для чтения/записи данных в файл. Предполагается, что к этому объекту можно получить доступ из разных потоков (он потокобезопасен), однако существует проблема, заключающаяся в том, что, по-видимому, к объектам RFile можно получить доступ только в пределах одного потока. Как только другой поток использует объект RFile, я получаю KERN-EXEC 0.

Есть ли способ поделиться объектом RFile между разными потоками? Я не могу использовать активные объекты.


person Steven    schedule 21.10.2008    source источник


Ответы (3)


Создайте второй дескриптор RFile (назовем его secondFile). Не открывай его. Вместо этого используйте RFile::Duplicate(secondFile). После этого все потоки в вашем процессе должны иметь возможность использовать дескриптор secondFile.

person michael aubert    schedule 21.10.2008

Использование RFs::ShareAuto() работает.

person Steven    schedule 23.10.2008

Вы ищете сочетание:

  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)
person Dynite    schedule 12.01.2010