Выйдите из основного цикла, возможно, поток все еще работает - PullRequest
0 голосов
/ 28 марта 2011

Привет всем ~ У меня такая проблема, что мне так скучно. Иногда, когда я закрываю свою программу, в системе Linux все еще работает какой-то поток, это вызывает сбой после выхода из основного цикла. Есть ли способ, который может убить все потоки, когда я выйду из основного цикла?

Ответы [ 2 ]

3 голосов
/ 28 марта 2011

Было бы очень полезно, если бы вы указали свой язык программирования и библиотеку потоков.

Обычный способ управления ситуацией такого типа (то есть родительский поток должен дождаться завершения дочерних процессов перед завершением) - это вызвать функцию, предоставляемую библиотекой, обычно называемую join или wait .

pthread предоставляет, например, pthread_join .

Если вы порождаете процессы с помощью fork, вы должны использовать wait или waitpidв родительском, чтобы остановить, пока ребенок не завершит - попробуйте man waitpid или посмотрите на this .

Таким образом, вы можете сообщить своим детям, что вы собираетесь выйти, обычными способами,подождите, пока они не закроются и не прекратят работу, а затем аккуратно выйдите из основного цикла.

Помогает ли это?Это наименее грубый способ синхронизации завершения, если вы хотите активно уничтожать дочерние потоки, конечно, есть альтернативы (например, pthread_kill для pthreads).

0 голосов
/ 29 марта 2011

Если вы используете java, попробуйте использовать jconsole (консоль мониторинга и управления Java), поставляемую с jdk6u23 в моем случае.Вы можете получить имя потока, который не был уничтожен.Вы можете использовать соединение для этой темы, чтобы завершить.

Но может быть проблема с программой, в моем случае у меня был поток таймера, висящий [Timer-0] java.util.Timer для создания timer.cancel (), который закрывал этот таймер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...