Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Qt + threads


Автор: Artemon 14.4.2011, 12:47
Есть два потока Th1, Th2

Th2 создается внутри метода run() потока Th1().

Внутри потока Th2 создается объект QProcess и его сигналы привязываются к слотам потока Th2, но эти слоты НИКОГДА не срабатывают (не смотря на то что я создаю очередь сообщений, вызовом метода exec() ).


Если вместо Th1 использую основной поток приложения - все слоты QProcess вызываются.

Почему когда один поток(b) создается из другого потока(a) в потоке b не работают слоты ?

Автор: borisbn 14.4.2011, 12:51
что пишется в окне output при connect'е и при emit'е ?

Автор: Artemon 14.4.2011, 13:02
При connect ничего не пишется, все ok.

А вот emit у меня нет т.к. emit присходит внутри QProcess (стандартные его сигналы finished и т.д.)

Автор: null56 15.4.2011, 19:35
сейчас попробую вопроизвести ситуацию
Цитата

Есть два потока Th1, Th2
...
, но эти слоты НИКОГДА не срабатывают (не смотря на то что я создаю очередь сообщений, вызовом метода exec() ).

Вопрос: где вызывается exec? посмотрите строку номер 9 и 21

Код

class Th1 : QThread
{
//...
// дочерний поток 
   void run()
   {
      Th2 th2; // "Th2 создается внутри метода run() потока Th1()."
      th2.start();
      exec(); // ТУТ запускаете обработчик событий??????????????????????
   }
};

class Th2 : QThread
{
//...
// дочерний поток
   void run()
   {
      QProcess process; // "Внутри потока Th2 создается объект QProcess и .."
      connect(&process, SIGNAL(some_process_signal), SLOT(th2_slot)); // "...его сигналы привязываются к слотам потока Th2"
      exec(); // ИЛИ ТУТ?????
   }
// слоты для обработки сигналов процесса
   void th2_slot(QObject * obj)
   {
      // что - то делаем
   }
};



я правильно воспроизвел ситуацию?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)