pthread_exit
bir ___forced_unwind istisna olabilir (std::exception
Örneğin, atılan edilmemektedir), bu iş parçacığı çıkışı sırasında yığınını dinlenmek için kullanılır. std::exception
'dan miras almaz ve bu nedenle tek olarak yakalanamaz. bir istisnası atılır
try {
...
} catch (abi::___forced_unwind&) {
throw;
} catch (...) {
// whatever
}
nedeni pthread_exit
dönmemek üzere belirlenmiş olması: O durum yakalamak yaparsanız onun işini yapabilir, böylece throw
onu yeniden emin olun. Atmak, yığın-tahsis edilmiş değişkenlerin temizlenmesini ve yerini sonradan kodun yürütülmesini garanti etmez (gevşeme istisnasını yakalamadıkça ...).
BTW, bu, catch (...)
deyiminin, iyi olandan daha fazla zarar verdiği başka bir durumdur. Bazen bilinmeyen istisnalar atan kod "stabilize" için kullanılır. Ancak bu, sadece hasarın görünürlüğünü daha sonraki bir zamana ve yere indirgemekte, bu da sorunun gerçek kaynağını tanımlamayı imkânsız kılmaktadır. Böyle bir yakalamada yapılabilecek tek mantıklı şey, muhtemelen günlükleri temizleyen ve daha sonra yeniden serpiştiren minimal temizlemedir. İşlenmeyen bir istisna nedeniyle çökmekte olan bir işlem oldukça hoş görünmez, ancak hatalı komutu açıkça gösteren bir hata ayıklama kilitlenme dökümü sağlayabilir. Ama bu sadece pthread_exit
...
ile ilgili olan
catch (...)
'a karşı kinim bu altında ne görüyorsunuz? –@Fabio Belki yığınındaki bir nesnenin bazı yıkıcıları fırlatır. –
@DaveS g ++ TorstenRobitzki teşekkür ederim, ben de aynısını yaptım ama durum eran tarafından açıklanmıştı –