Название: Передача в сигнал своего класса и его потомков в многопоточном приложении Отправлено: Pink_Panter от Октябрь 01, 2010, 15:30 Читаю документацию, ищу в интернете и немного запутался. Не могу найти информацию именно для моего случая.
Хочу следующего: - несколько различных объектов работают параллельно, каждый в своем потоке. - в каждом потоке запущена очередь событий. - объекты обмениваются информацией через механизм сигналов/слотов. - аргумент сигнала(слота) мой класс(структура?) "сообщение" передающийся по значению?, ссылке?, указателю? - соединения сигналов со слотами - многие ко многим (т.е. один сигнал может приходить в несколько слотов, и несколько сигналов приходить в один слот) используя Qt::QueuedConnection. - память для "сообщения" должна выделиться перед генерацией сигнала и освободиться после обработки в последнем слоте. - иногда возникает необходимость передать в сигнале дополнительную информацию, используя для этого потомков класса "сообщение" Вопрос: как этого добиться? При этом не вызвав утечек памяти и Segmentation fault. Плюс хотелось бы хорошей производительности. Каким образом нужно передавать аргумент по значению?, ссылке?, указателю?, "умному" (QSharedPointer и иже с ним) указателю? Нужно ли и как использовать qRegisterMetaType() для "сообщения" и его потомков? ЗЫ: в числе прочего класс "сообщение" содержит в себе QByteArray. Как его лучше хранить статически или динамически? Название: Re: Передача в сигнал своего класса и его потомков в многопоточном приложении Отправлено: p166 от Октябрь 01, 2010, 16:21 Использование qRegisterMetaType() :
qRegisterMetaType<TYPE_NAME>("TYPE_NAME"); Название: Re: Передача в сигнал своего класса и его потомков в многопоточном приложении Отправлено: AlekseyK от Октябрь 27, 2010, 13:17 Посмотри примеры examples\threads\mandelbrot\ и examples\network\blockingfortuneclient\ и поймёшь как передавать данные из потока - там это хорошо разобрано.
Название: Re: Передача в сигнал своего класса и его потомков в многопоточном приложении Отправлено: andrew.k от Ноябрь 02, 2010, 21:46 Посмотри примеры examples\threads\mandelbrot\ и examples\network\blockingfortuneclient\ и поймёшь как передавать данные из потока - там это хорошо разобрано. там не разобрано, как в сигналах/слотах использовать свой класс и передавать его по ссылке Название: Re: Передача в сигнал своего класса и его потомков в многопоточном приложении Отправлено: andrew.k от Ноябрь 04, 2010, 14:11 в итоге я пришел к выводу, что по ссылке вообще нельзя передавать. Либо указатель либо константная ссылка.
|