Поделиться Symbile's RFile между двумя потоками - PullRequest
3 голосов
/ 21 октября 2008

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

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

Ответы [ 3 ]

3 голосов
/ 22 октября 2008

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

1 голос
/ 23 октября 2008

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

0 голосов
/ 12 января 2010

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

  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)
...