2013-03-30 88 views
0

我有一個qt應用程序,有幾個boost線程正在運行。當我在我的一個qt事件處理程序中遇到未處理的異常(例如std :: runtime_error)時,boost線程還會捕獲thread_interrupted異常。當qt崩潰時,boost線程中斷

爲什麼會發生這種情況?我已經在所有中斷點都嘗試了catch塊,比如boost睡眠,所以我不能確定thread_interrupted異常來自哪裏(即使所有被記錄爲中斷點的調用都已經存在包裹在try-catch塊中)。

運行時或qt以某種方式終止boost線程並導致thread_interrupted異常嗎?

理想情況下,我想在qt中的任何未處理的異常出現在主線程中,而不是在boost線程中。

回答

0

已解決。我在屏障上發現了無保護的等待。 當Qt插槽發生異常時,Qt開始清理並調用應用程序析構函數。這反過來導致我的線程被中斷,等待障礙的線程拋出異常。