SORU
24 EKİM 2008, Cuma


Ne kadar iş arasında özel durumlar yaymak olabilir miyim?

Tek bir iş parçacığı (ana konu adı) içine çağıran bir işlevi var. İşlev gövdesi içinde birden fazla çalışan iş parçacığı CPU yoğun iş spawn bütün konuları bitmesini bekleyin, ana iş parçacığı üzerinde sonuç dönün.

Sonuç arayan işlevi saf bir şekilde kullanabileceği ve dahili olarak birden çok çekirdek kullanın.

Tüm iyi şimdiye kadar..

Yaşadığımız problemin özel durumları ile ilgili. Çalışan iş parçacığı uygulama çökme için özel durumlar istemiyoruz. Fonksiyonu çağıran ana iş parçacığı üzerinde onları yakalamak mümkün olmak istiyorum. Çalışan iş parçacığı üzerinde özel durumları yakalamak ve onları oradan devam gevşemek için ana iş parçacığı yaymak karşısında olmalıyız.

Bunu nasıl yapabiliriz?

Aklıma gelen en iyi

  1. Bizim işçi iş parçacığı üzerinde özel durumlar hepsi farklı (:: std istisna ve kendi olanları birkaç) yakalamak.
  2. Özel durum türü ve mesajı kaydedin.
  3. İş parçacığı kaydedilen şey her ne ise özel durumlar rethrows ana konu üzerinde karşılık gelen switch deyimi var.

Bu tek istisna türleri sınırlı bir dizi destekleyici bariz dezavantajı var, ve yeni hata tipleri eklendi zaman değiştirilmesi gerekir.

CEVAP
24 EKİM 2008, Cuma


Şu anda, tektaşınabiliryol evreler arasındaki transfer etmek isteyebileceğini istisnalar her türlü yakalamak için cümlecikleri yazmak, bir yerde bu bilgileri yakalamak tümce depolamak ve daha sonra bunu bir istisna yeniden oluşturma için kullanın. Bu yaklaşım Boost.Exception tarafından alınır.

C 0, catch(...) ile bir özel durumu yakalamak mümkün olacak ve daha sonra saklayın. std::exception_ptr örneği std::current_exception() kullanarak. Daha sonra aynı ya da std::rethrow_exception() ile farklı bir iş parçacığı yeniden oluşturma yapabilirsiniz.

Eğer Microsoft Visual Studio 2005 veya sonraki bir sürümünü kullanıyorsanız, o zaman just::thread C 0x thread library 4 destekler**. (Yasal Uyarı: Bu ürün).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Autodesk 3ds Max Learning Channel

    Autodesk 3ds

    23 HAZİRAN 2010
  • Mark Hyder

    Mark Hyder

    6 EKİM 2011
  • WoodysGamertag

    WoodysGamert

    17 Aralık 2009