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

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

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

3 ответа

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

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

Вы ищете комбинацию из:

  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)
Другие вопросы по тегам