Название: Отправить данные в поток Отправлено: Paramon от Январь 05, 2015, 15:04 Создаю поток, в нём сигнал. Из нового потока отправляю emit оконному потоку. В нём ловлю сигнал. Как теперь отправить обратку потоку? По наивности также отправляю emit, который получают все потоки (что логично).
Каким образом можно ответить потоку, от которого пришёл сигнал? Если нельзя использовать сигналы/слоты, ткните носом что покурить. Название: Re: Отправить данные в поток Отправлено: gil9red от Январь 05, 2015, 15:13 Можно узнать от какого потока пришел сигнал, вызывая функцию sender() (http://qt-project.org/doc/qt-4.8/qobject.html#sender) в слоте, который сигнал вызвал.
Название: Re: Отправить данные в поток Отправлено: Paramon от Январь 05, 2015, 15:20 Вот как-то так работает. Но боюсь граблей. ???
Код: void MainWindow::GetStringData() Название: Re: Отправить данные в поток Отправлено: Fregloin от Январь 08, 2015, 15:34 можно слать QEvent потокам через post/sendEvent. У вашего потока должен быть запущен свой менеджер сообщений вызовом exec().
Если вкратце. Делаем наследника от QEvent, определяем его тип (числовая константа QEvent::UserType + ваш номер). Потом отправляем вашему конкретному потоку это сообщение Код:
Вот так я у себя реализовывал рассылку частей json документа на парсинг в несколько потоков. Название: Re: Отправить данные в поток Отправлено: Fregloin от Январь 08, 2015, 15:35 и да, сообщение будет удалено диспетчером сообщений, поэтому вызывать delete для него не следует.
Название: Re: Отправить данные в поток Отправлено: Paramon от Январь 10, 2015, 10:55 Благодарю.
Название: Re: Отправить данные в поток Отправлено: Авварон от Январь 11, 2015, 08:47 sendEvent не удаляет эвенты
Название: Re: Отправить данные в поток Отправлено: Igors от Январь 11, 2015, 10:59 sendEvent не удаляет эвенты Да, и не выполняется ли оно в текущей нитке? (по-моему да). Вот если postEvent - тогда все верно (событие в куче и удалять самому не надо) Название: Re: Отправить данные в поток Отправлено: Fregloin от Январь 12, 2015, 11:06 я писал по памяти, точно уже не помню, но думаю более простого способа под Qt не найти.
|