2014-01-05 81 views
1

我有下面的代碼是新線程的開始。 BeginWork函數執行一系列具有繁重異常處理的函數。如果threadgroup.interrupt_all();被稱爲單個函數將處理中斷,並且這導致線程保持在它的循環中而不被正確中斷。我怎樣才能改變我的錯誤處理來解釋這種類型的異常,並像模仿intial循環的外部try catch catch塊捕獲線程中斷異常那樣模仿行爲?我想也許趕上時間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對您有用