Как правильно завершить/закрыть/выйти из потока при закрытии потока графического интерфейса в Qt

Ссылаясь на код решения, указанный здесь

Как запустить таймер внутри QThread?

не упоминается, может ли возникнуть ошибка sigsev в случае закрытия основного (графического) потока (например, с помощью кнопки X).

Мой вопрос заключается в том, как мне обрабатывать (если я должен обрабатывать это в первую очередь) завершение второго потока в случае завершения потока графического интерфейса?

В случае, если данные/события больше не актуальны после завершения GUI, могу ли я просто

m_thread->terminate();

в деструкторе MainWindow или в переопределенном CloseEvent()??

В случае, если данные/события имеют значение вместо этого?


person Luigi    schedule 21.04.2017    source источник
comment
Если это не является абсолютной необходимостью, избегайте попыток явного завершения потоков в пользовательском коде, особенно в пользовательском коде с графическим интерфейсом. Очень старайтесь не разрабатывать приложения, требующие явного завершения потока. Никогда, никогда не устанавливайте какой-либо флаг «завершить», а затем ждите в обработчике событий «OnClose» с графическим интерфейсом, деструкторе формы или подобном, с помощью join() или цикла или любого другого вида ожидания.   -  person ThingyWotsit    schedule 21.04.2017
comment
Возможный дубликат Выйти из QThread при выходе из приложения с графическим интерфейсом   -  person m7913d    schedule 22.04.2017
comment
См. также документацию Qt для QThread::terminate и QThread. Приведен наглядный пример.   -  person m7913d    schedule 22.04.2017


Ответы (1)


Мой вопрос заключается в том, как мне обрабатывать (если я должен обрабатывать это в первую очередь) завершение второго потока в случае завершения потока графического интерфейса?

Если поток GUI завершается, мы обычно заставляем приложение выходить из процесса? Скажем, «завершение потока GUI» или, может быть, лучше «выход» или «выход», что означает уже выход из цикла событий GUI, чтобы больше не взаимодействовать с рабочими потоками из потока GUI. Нам по-прежнему может потребоваться явно освободить определенные ресурсы, управляемые рабочими потоками, иначе мы потенциально можем заблокировать процесс, ожидая их освобождения.

person Alexander V    schedule 21.04.2017