Подтвердить что ты не робот

Выполняют ли дочерние потоки, когда родительский поток завершается

Я делал многопоточное программирование в Visual Studio С++, используя вызовы beginthreadex, endthreadex.

Создаю дочерний поток thread1. Детский поток работает с функцией, которая никогда не выходит, поскольку она имеет бесконечный цикл. Теперь, если родительский поток завершается с ошибкой или заканчивается успешно, также выходит дочерний поток? Мое сомнение - есть ли ситуация, когда дочерний поток жив даже после выхода основной программы?

Для linux, каким должен быть этот случай?

4b9b3361

Ответ 1

Между потоками нет отношений между родителями и дочерними элементами. Если поток A создает поток B, а затем поток A заканчивается, то поток B будет продолжать выполняться.

Исключением является то, что основной поток (то есть поток, который запускает функцию main()) завершается. Когда это произойдет, процесс завершается, и все остальные потоки останавливаются.

Ответ 3

Как только ваш процесс умирает, все ресурсы освобождаются (память, файлы и потоки)

Правильный способ сделать это: когда вы вызываете beginthread, сохраните возвращаемый дескриптор в родительском потоке и вызовите WaitForObject, прежде чем покинуть программу (мы присоединяемся к родительскому потоку с дочерним потоком).

Родительский поток будет блокироваться до завершения дочернего потока. Если ваш дочерний поток имеет бесконечный цикл, вы можете определить "точку прерывания" и проверить, следует ли вам уйти. Например, используя общую логическую переменную. Проверьте Прервать вежливо за дополнительной информацией.