Russian Qt Forum
Ноябрь 22, 2024, 21:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Передача в сигнал своего класса и его потомков в многопоточном приложении  (Прочитано 4829 раз)
Pink_Panter
Гость
« : Октябрь 01, 2010, 15:30 »

Читаю документацию, ищу в интернете и немного запутался. Не могу найти информацию именно для моего случая.
Хочу следующего:
- несколько различных объектов работают параллельно, каждый в своем потоке.
- в каждом потоке запущена очередь событий.
- объекты обмениваются информацией через механизм сигналов/слотов.
- аргумент сигнала(слота) мой класс(структура?) "сообщение" передающийся по значению?, ссылке?, указателю?
- соединения сигналов со слотами - многие ко многим (т.е. один сигнал может приходить в несколько слотов, и несколько сигналов приходить в один слот) используя Qt::QueuedConnection.
- память для "сообщения" должна выделиться перед генерацией сигнала и освободиться после обработки в последнем слоте.
- иногда возникает необходимость передать в сигнале дополнительную информацию, используя для этого потомков класса "сообщение"

Вопрос: как этого добиться? При этом не вызвав утечек памяти и Segmentation fault. Плюс хотелось бы хорошей производительности.
Каким образом нужно передавать аргумент по значению?, ссылке?, указателю?, "умному" (QSharedPointer и иже с ним) указателю?
Нужно ли и как использовать qRegisterMetaType() для "сообщения" и его потомков?

ЗЫ: в числе прочего класс "сообщение" содержит в себе QByteArray. Как его лучше хранить статически или динамически?
Записан
p166
Гость
« Ответ #1 : Октябрь 01, 2010, 16:21 »

Использование qRegisterMetaType() :
qRegisterMetaType<TYPE_NAME>("TYPE_NAME");
Записан
AlekseyK
Гость
« Ответ #2 : Октябрь 27, 2010, 13:17 »

Посмотри примеры examples\threads\mandelbrot\ и examples\network\blockingfortuneclient\ и поймёшь как передавать данные из потока - там это хорошо разобрано.
Записан
andrew.k
Гость
« Ответ #3 : Ноябрь 02, 2010, 21:46 »

Посмотри примеры examples\threads\mandelbrot\ и examples\network\blockingfortuneclient\ и поймёшь как передавать данные из потока - там это хорошо разобрано.

там не разобрано, как в сигналах/слотах использовать свой класс и передавать его по ссылке
Записан
andrew.k
Гость
« Ответ #4 : Ноябрь 04, 2010, 14:11 »

в итоге я пришел к выводу, что по ссылке вообще нельзя передавать. Либо указатель либо константная ссылка.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 21.