Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: 0...-5 от Октябрь 20, 2011, 16:02



Название: Корректное завершение многопоточного приложения
Отправлено: 0...-5 от Октябрь 20, 2011, 16:02
Суть в следующем: при создании главного окна приложения создается и запускается на выполнение поток. Run потока представляет собой бесконечный цикл:
Код:
{
     while(true) {msleep(10);}
}

При закрытии основного окна появляется ошибка сегментации. Добавил в обработчик closeEvent() код
Код:
{
     thread->terminate();
     thread->wait();
}
результата нет. Как корректно уничтожить поток при закрытии окна?


Название: Re: Корректное завершение многопоточного приложения
Отправлено: Пантер от Октябрь 20, 2011, 16:04
В поиск, вопрос не раз уже обсуждался.


Название: Re: Корректное завершение многопоточного приложения
Отправлено: 0...-5 от Октябрь 20, 2011, 22:03
В поиск, вопрос не раз уже обсуждался.
Честно говоря, искал...даже все 6 страниц просмотрел. Если не сложно, ткните носом. Если станет легче, согласен на оскорбления!


Название: Re: Корректное завершение многопоточного п
Отправлено: Пантер от Октябрь 20, 2011, 23:06
Сейчас влом искать, но недавно было несколько подобных тем.
Вот пример решения.
Код
C++ (Qt)
while (!stopped_) {
..............
}
................
Thread::Thread () : stopped_ (false) {}
void Thread::stop () {
 stopped_ = true;
}
 


Название: Re: Корректное завершение многопоточного приложения
Отправлено: Igors от Октябрь 20, 2011, 23:42
Нет хорошего способа "прибить" нитку - надо дать ей "нормально" выйти самой. Простейший способ показал Пантер - нитка проверяет флажок и если он взведен - выходит из run. Убивающему надо установить флаг и вызвать метод QThread::wait (дождаться пока она завершится)