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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Многопоточный вывод на QGraphicsScene  (Прочитано 12405 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #15 : Май 05, 2010, 08:32 »

у вас получатель в мейне. а отправитель - нет.
Записан
BiTOk
Гость
« Ответ #16 : Май 05, 2010, 08:39 »

Верно, но в этой же проге я писал, эмит сигнала в главный поток из run() и он отправлялся из run().
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #17 : Май 05, 2010, 08:50 »

не важно откуда посылать, главное - где принимают. На то очередь и нужна, чтобы тредобезопасно перебросить из 1й нитки в другую. Я вам просто предлагаю проверить случай когда получающий не в главной нитке:) Могу ошибаться, но мне кажется такое обоснование логичным. У самого сейчас Qt далеко...
Записан
BRE
Гость
« Ответ #18 : Май 05, 2010, 08:59 »

Могу ошибаться, но мне кажется такое обоснование логичным. У самого сейчас Qt далеко...
Все верно, сразу не обратил внимания.

Нужно перетащить сам объект Worker в контекст потока:
Код
C++ (Qt)
Worker::Worker(int startPlace, QObject *parent):QThread()//позиция, откуда следует начинать путь
{
   moveToThread( this );
 
   x = 25.5; //абсцисса всегда такая, ибо это сразу после начальной стены
   y = startPlace*25+25.5;
 
   this->parent = parent;
   myPeople = NULL;
}

и все заработает.
Записан
BiTOk
Гость
« Ответ #19 : Май 05, 2010, 09:07 »

Хм.. действительно работает, спасибо, парни.
Записан
alexman
Гость
« Ответ #20 : Май 05, 2010, 09:16 »

спс, буду знать!
Записан
BiTOk
Гость
« Ответ #21 : Май 05, 2010, 13:54 »

Возник вопрос: как убить правильно поток и удалить созданный объект, если учитывать, что поток, который должен быть остановлен, накидал много-много сообщений главному треду, в одном из параметров сообщения находится указатель, который становится неверным, если прибить поток.. Если в лоб прибить - то упадёт в главном треде, а если не завершать, то будет течь память, да и вообще это как-то некрасиво. Могу выложить код, если кто захочет посмотреть.
Записан
BRE
Гость
« Ответ #22 : Май 05, 2010, 14:00 »

Возник вопрос: как убить правильно поток и удалить созданный объект, если учитывать, что поток, который должен быть остановлен, накидал много-много сообщений главному треду, в одном из параметров сообщения находится указатель, который становится неверным, если прибить поток.. Если в лоб прибить - то упадёт в главном треде, а если не завершать, то будет течь память, да и вообще это как-то некрасиво. Могу выложить код, если кто захочет посмотреть.
В твоем случае, т.к. используется цикл обработки событий:
Код
C++ (Qt)
thread->quit(); // Говорим - завершиться
thread->wait(); // Ждем пока завершиться
// Делай с указателем, что хочешь
 

или

Код
C++ (Qt)
connect( thread, SIGNAL( finished() ), thread, SLOT( deleteLater() ) );
 
Записан
BiTOk
Гость
« Ответ #23 : Май 05, 2010, 14:50 »

Но bool QThread::finished () const, разве это можно использовать в качестве сигнала?
Записан
BRE
Гость
« Ответ #24 : Май 05, 2010, 14:56 »

Но bool QThread::finished () const, разве это можно использовать в качестве сигнала?
Найди два отличия:  Улыбающийся
bool QThread::isFinished () const
void QThread::finished ()   [signal]
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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