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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Корректное завершение многопоточного приложения  (Прочитано 5367 раз)
0...-5
Гость
« : Октябрь 20, 2011, 16:02 »

Суть в следующем: при создании главного окна приложения создается и запускается на выполнение поток. Run потока представляет собой бесконечный цикл:
Код:
{
     while(true) {msleep(10);}
}

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

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 20, 2011, 16:04 »

В поиск, вопрос не раз уже обсуждался.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
0...-5
Гость
« Ответ #2 : Октябрь 20, 2011, 22:03 »

В поиск, вопрос не раз уже обсуждался.
Честно говоря, искал...даже все 6 страниц просмотрел. Если не сложно, ткните носом. Если станет легче, согласен на оскорбления!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Октябрь 20, 2011, 23:06 »

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Октябрь 20, 2011, 23:42 »

Нет хорошего способа "прибить" нитку - надо дать ей "нормально" выйти самой. Простейший способ показал Пантер - нитка проверяет флажок и если он взведен - выходит из run. Убивающему надо установить флаг и вызвать метод QThread::wait (дождаться пока она завершится)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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