Использование исключений в потоке boost :: thread - PullRequest
1 голос
/ 11 октября 2010


Я начал играть с boost :: threads, но я как-то застрял с этой проблемой:

Я не понимаю, почему эта программа падает, как только выдается исключение, потому что я пытаюсь поймать его в потоке.Я думал, что будет возможно работать с исключениями, если обработка происходит в том же потоке, что и бросание?

#include <boost/thread.hpp>
#include <exception>

using namespace std;

void doWork();
void thrower();

int main( int argc, char** argv ){
 boost::thread worker(doWork);
 worker.join();
 return 0;
}

void doWork(){
 try{
    thrower();
 }
 catch( const exception &e ){
  //handle exception
 }
}
void thrower(){
 // program terminates as soon as the exception is thrown
 throw exception();
}

Дополнительная информация:
* Использование MinGW32
* Boost v.1.44
* Динамическое связывание с многопоточной отладочной dll Версия потока lib

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

Я нашел проблему: это ошибка в библиотеке boost, которая возникает только при работе с версией minGW, более новой, чем 3.17. Билет для ускоренного билета # 4258

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

Большое спасибо за ваши комментарии

0 голосов
/ 12 октября 2010

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

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

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