2014-01-05 5 views
1

У меня есть код, ниже которого начинается новый поток. Функция BeginWork проходит через последовательность функций, которые имеют большую обработку исключений. Если threadgroup.interrupt_all(); называется индивидуальной функцией, обрабатывающей прерывание, и это заставляет поток оставаться в своем цикле, не прерываясь должным образом. Как я могу изменить свою обработку ошибок для учетной записи этого типа исключения и имитировать поведение, как если бы внешний блок catch try в цикле intied поймал исключение прерывания потока? Я думаю, возможно, поймать исключение времени interupt и установить логическое значение true, которое проверяется в основном цикле и ломается, если оно установлено в true.Правильный способ улавливать прерывание потока потока и выходную строку

void ThreadWorker(int intThread) 
{ 
    try 
    { 
     int X = 0; 


     do 
     { 
      cout << "Thread " << intThread << "\n"; 
      BeginWork(); 
     } 
     while (true); 

    } 

    catch(...) 
    { 
     cout << "Thread: " << intThread << " Interrupted."; 
    } 
} 

ответ

0

Вы легко можете сделать это boost::thread_interrupted Повторное выбрасывание в функции уловов сайта

try 
{ 
    // data processing 
} 
catch(const boost::thread_interrupted &) 
{ 
    throw; 
} 
catch(...) 
{ 
    // exceptions suppression 
} 

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

Может быть это может быть полезным site

Смежные вопросы