Поделиться Symbile's RFile между двумя потоками
В многопоточном приложении, которое я портирую на Symbian с помощью Open C, у меня есть объект, который использует RFile для чтения / записи данных в файл. Предполагается, что доступ к этому объекту осуществляется из разных потоков (он безопасен для потоков), однако существует проблема, заключающаяся в том, что очевидно, что объекты RFile могут быть доступны только в пределах одного потока. Как только другой поток использует объект RFile, я получаю KERN-EXEC 0.
Есть ли способ поделиться объектом RFile между различными потоками? Я не могу использовать активные объекты.
3 ответа
Создайте второй дескриптор RFile (назовем его secondFile). Не открывай это. Вместо этого используйте RFile::Duplicate(secondFile). Все потоки в вашем процессе должны иметь возможность использовать дескриптор secondFile после этого.
Вы ищете комбинацию из:
Передает уже открытый файл с сервера на клиент
RFile::TransferToClient(const RMessage2 &,TInt)const
Перенос уже открытого файла в другой процесс
RFile::TransferToProcess(RProcess &,TInt,TInt)const
Передает уже открытый файл на сервер
RFile::TransferToServer(TIpcArgs &,TInt,TInt)const
в первом потоке / сервере / процессе и
Позволяет серверу принять уже открытый файл от клиента
RFile::AdoptFromClient(const RMessage2 &,TInt,TInt)
Позволяет серверу принять уже открытый файл из клиентского процесса
RFile::AdoptFromCreator(TInt,TInt)
Позволяет клиенту принять уже открытый файл с сервера
RFile::AdoptFromServer(TInt,TInt)
.. во-вторых. Это эффективно дублирует дескриптор файла, позволяя обоим использовать его.
Если вы перемещаетесь между потоками в одном и том же процессе, вы можете более просто использовать
RFile::Duplicate(const RFile &,TOwnerType)