При использовании boost :: thread :: interrupt () вам * нужно * перехватить исключение thread_interrupted? - PullRequest
9 голосов
/ 16 июня 2011

У меня есть несколько длительных потоков наддува, которые я хочу отключить, прерывая их. Вся документация, которую я могу найти, говорит, что вы можете поймать исключение thread_interrupted, но на самом деле не говорится, что произойдет, если вы этого не сделаете. Я бы предположил, что это убивает поток (и, надеюсь, поток будет правильно очищен). Но тогда исключение умрет с потоком? Или он передается в основной поток и уничтожает его тоже?

1 Ответ

11 голосов
/ 16 июня 2011

Исключение, как и любое другое исключение C ++. Если вы решите не ловить его, это вызовет тот же эффект, что и любое другое необработанное исключение.

Если оставить его необработанным, он не будет распространяться на основной поток, но может вызвать другое нежелательное поведение. В Visual C ++, по умолчанию это завершит ваш процесс , например.

В целом практика защитного программирования диктует, что вы должны отлавливать любое исключение, которое может выдать ваш код, - точно так же, как вы проверяли бы наличие ошибок в API-интерфейсе ОС, который вы вызывали.

Здесь есть фон для прерывания здесь от человека, который написал много кода Boost.Thread.

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