Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: Paul от Август 17, 2011, 15:41



Название: ожидание окончания запуска потока
Отправлено: Paul от Август 17, 2011, 15:41
Добрый день, коллеги. Есть вопрос по потокам: для работы клиента создал объект, к-ый использует 3 дочерних потока (приёмник, обработчик и передатчик), которые создаются и стартуют в конструкторе объекта. Чтобы рабочие данные принадлежали самим потокам, их создание и cоnnect-ы определены в run(). Если в главной прог-е создание и выполнение
1-ой операции выполнить без задержки, то "дочки-поточки" не успевают "разогнаться" полностью, т.к. start() только запускает run() и не ждёт его выполнения, что понятно (если exec(), то не дождёшься).
НУЖНА ПАУЗА !!!

Я по своей малости знания QT решил задачку так: разделил создание и выполнение 1-ой операции на две функции, в конце 1-ой (после создания объекта в окне) выполнил
QTimer::singleShot(500, this, SLOT(executOper()));
где, как легко догадаться executOper() - выполнение операции.

С моей колокольни - как-то коряво. Так и хочется после start() написать wait(), но для какого потока ??? У меня не получилось. Поделитесь пожалуйста знаниями.

   С уважением, Paul


Название: Re: ожидание окончания запуска потока
Отправлено: Странник от Август 17, 2011, 15:52
совершенно не понял смысла вашего сообщения. если вам нужно узнать, когда реально запустился поток - сигнал QThread::started() вам в помощь, по завершении работы потока высылается сигнал QThread::finished().


Название: Re: ожидание окончания запуска потока
Отправлено: LisandreL от Август 17, 2011, 15:57
Да, уточните чего именно вы хотите дождаться. Лучше с примером своего кода.


Название: Re: ожидание окончания запуска потока
Отправлено: Paul от Август 18, 2011, 14:52
Добрый день, коллеги. Извините, но вчера, в конторе накрылось электричество и по-этому
возникла пауза. Мне надо дождаться момента запуска потока (начало работы exec ???).
Предполагал такой код:

   Tmy_Thread *my_Thread=new Tmy_Thread();
   my_Thread->start();
   while(!my_Thread->isRunning())
   {
      какой-то wait !!!
      какой ???

   }

   С уважением, Paul


Название: Re: ожидание окончания запуска потока
Отправлено: LisandreL от Август 18, 2011, 16:32
Код
C++ (Qt)
  while( !( my_Thread->isRunning() || my_Thread->isFinished() ) )
  {
        QThread::yieldCurrentThread();
  }


Название: Re: ожидание окончания запуска потока
Отправлено: Paul от Август 29, 2011, 20:07
Спасибо, LisandreL, и удачи Вам.

С уважением, Paul