2013-03-30 2 views
0

У меня есть приложение qt с несколькими потоками поддержки. Когда я получаю необработанное исключение (например, std :: runtime_error) в одном из обработчиков событий qt, потоки boost также захватывают исключения thread_interrupted.Boost thread interrupted when qt crashes

Почему это происходит? Я уже пытаюсь блокировать захват во всех точках прерывания, например, ускорять сон, поэтому я не могу понять, откуда приходит исключение thread_interrupted (исключение попадает в функцию потока, даже если все вызовы, задокументированные как точки прерывания, уже завернутые в блоки try-catch).

Выполняет ли runtime или qt как-то прекращение потоков boost и вызывает исключение thread_interrupted?

В идеале я хотел бы, чтобы любое необработанное исключение в qt отображалось в основном потоке, а не в потоках повышения.

ответ

0

Решено. Я нашел незащищенное ожидание на барьере. Когда в слоте Qt возникает исключение, Qt начинает очистку и вызывается деструктор приложения. Это, в свою очередь, заставило мои потоки прерываться, и те потоки, ожидающие барьеров, затем бросали исключения.