Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Корректное завершение потока


Автор: vadimp56 19.2.2011, 19:27
Здравствуйте.
У меня такая проблема:  создаю в своей программе поток, он выполняет какие-то действия и завершается.
Так вот, есть ли возможность отследить выход из этого потока, чтобы завершить программу.

Автор: azesmcar 19.2.2011, 19:28
vadimp56

Поток завершается тогда, когда завершается его функция выполнения. Но я не совсем понял зачем это может понадобиться?

Автор: hawk3500 19.2.2011, 19:48
Если Вы имеете ввиду ситуацию когда у вас многопоточное приложение и вы хотите при завершении выполнения определённого потока завершить процесс то есть несколько вариантов:
1)
while(!!GetThreadId(Thread))Sleep(100);
Exit(1);
2)
При выходе из потока изменить глобальный флаг,а лучше Object а в основном потоке ждать WaitForSingleObject........
3)Ну или не совсем корректно но можно:
в конце дополнительного потока выполните ExitProcess;

Автор: Modul 19.2.2011, 20:13
Цитата(azesmcar @  19.2.2011,  19:28 Найти цитируемый пост)
Поток завершается тогда, когда завершается его функция выполнения. 


Истина.

Цитата(azesmcar @  19.2.2011,  19:28 Найти цитируемый пост)
Но я не совсем понял зачем это может понадобиться?


Ну, новичку все надо. 

Я реально применял  завершение потока для выхода из цикла, используя break.

Автор: azesmcar 19.2.2011, 20:17
Цитата(Modul @  19.2.2011,  20:13 Найти цитируемый пост)
Я реально применял  завершение потока для выхода из цикла, используя break. 

нет, имелось ввиду зачем нужно завершать программу при завершении потока. Может тогда и поток не нужен, пусть main и выполняет задачу а при завершении автоматом закроется программа.

Автор: vadimp56 19.2.2011, 21:23
Тут вот в чём дело.
У меня в программе создаётся поток, а уже в нём ещё два. Мне нужно отследить когда закроется один из них, а потом закрыть второй и вызвавший его поток.

Автор: миг 19.2.2011, 21:35
вызвать функцию BOOL GetExitCodeThread(HANDLE, PDWORD), которая проверяет завершен ли поток..

Автор: vadimp56 19.2.2011, 22:00
А можно усыпить вызывающий процесс, чтобы он заработал по завершении одного из дочерних?

Автор: alexvs11 19.2.2011, 22:20
vadimp56, сделать WaitForSingleObject( hThread ..

Автор: vadimp56 19.2.2011, 22:44
Спасибо. Буду пробовать.

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