Название: Передать большой объект Отправлено: blood_shadow от Май 20, 2011, 16:57 Допустим есть класс потомок QThread, ф-ция run которого выглядит примерно так:
Код
в другом потоке создается объект и вызывается обработка событий, допустим какое-то событие вызывает слот объекта threadObject, например parseMessage(): Код
В этой ф-ции (parseMessage()) происходит нарезка где-то на 20Мб, надо передать эту инфу другому объекту и другому потоку(объекту SomeObject, который живет в гуи-потоке) передавать путем копирования параметров в соединениях сигнал-слот выглядит как не рационально, ссылку передавать как-то не безопасно, как лучше поступить в данном случае? Название: Re: Передать большой объект Отправлено: Fess от Май 20, 2011, 19:38 Писать большой объект в SharedMemory, а через сигнал/слот уведомлять о доступности и расположении.
http://doc.qt.nokia.com/latest/qsharedmemory.html Название: Re: Передать большой объект Отправлено: BRE от Май 20, 2011, 19:43 Писать большой объект в SharedMemory, а через сигнал/слот уведомлять о доступности и расположении. А зачем?Данные должны быть доступны для разных потоков одного процесса, т.е. все данные и так в одном адресном пространстве. Нужно просто обеспечить синхронизацию доступа (почитать про всякие разные mutex, readwritelocker'ы, ...), ну или сигналами сообщать (подготовил порцию данных в одном буфере - послал сигнал с ссылкой на этот буфер, и начал формировать новую порцию данных в другом буфере). Название: Re: Передать большой объект Отправлено: blood_shadow от Май 20, 2011, 20:09 Писать большой объект в SharedMemory, а через сигнал/слот уведомлять о доступности и расположении. А зачем?Данные должны быть доступны для разных потоков одного процесса, т.е. все данные и так в одном адресном пространстве. Нужно просто обеспечить синхронизацию доступа (почитать про всякие разные mutex, readwritelocker'ы, ...), ну или сигналами сообщать (подготовил порцию данных в одном буфере - послал сигнал с ссылкой на этот буфер, и начал формировать новую порцию данных в другом буфере). в первом варианте нужно использовать подключение хэдеров и статические мьютексы/семафоры (потому как объекты о друг друге вообще ничего не знают) а можно подробнее про этот буфер, как он создается и с помощью чего? или это с помощью старого доброго new? Название: Re: Передать большой объект Отправлено: BRE от Май 20, 2011, 20:22 та знаю я что такое примитивы синхронизации, но чтобы синхронизировать доступ как вы предлагаете Здесь не очень понял про проблемы с подключением хэдеров и статическими мьютексами? Мьютексы не обязательно будут статическими, да и подключение хедера не так страшно. ::)в первом варианте нужно использовать подключение хэдеров и статические мьютексы/семафоры (потому как объекты о друг друге вообще ничего не знают) а можно подробнее про этот буфер, как он создается и с помощью чего? или это с помощью старого доброго new? Можно через new, можно использовать какой нибудь контейнер. |