boost::thread
nesnesinin kullanım ömrü ve yerel iş parçacığının ömrü birbiriyle ilişkili değildir. boost::thread
nesnesi, herhangi bir zamanda kapsam dışı kalabilir. boost::thread
sınıfından
bir dosyanın süresi dosyayı temsil bir iostream nesnesinin yaşam süresi farklı olabilir gibi documentation
, yürütmenin ipliğin süresi akıştan farklı olabilir yürütme iş parçasını temsil eden nesne. Özellikle, join() öğesine yapılan bir çağrıdan sonra, iş parçacığı, normal iş parçasının sonuna kadar devam ettiği halde, iş parçacığı artık mevcut olmayacaktır. Sohbet de mümkündür; Bir iş parçacığı ilk önce çağrılan join() olmadan yok edilirse, yürütme iş parçacığı ilk işlevi tamamlanana kadar devam eder.
Düzenleme: Sadece join
çağırmak bir iş parçacığı başlar ve asla gerekiyorsa, bir fonksiyonu olarak parçacığının yapıcısını kullanabilirsiniz: Ancak
// Launch thread.
boost::thread(&do_work);
, bunu yapmana önermiyoruz , iş parçacığının main()
yapmadan önce tamamlandığından emin olsanız bile. İplik artık boost::thread
nesne aittir müstakil sonra
Neden iş parçacığı dinamik olarak oluşturuyorsunuz? –
@Martin York: Çünkü değişkenin kapsamından ayrıldıktan sonra thread nesnesinin yok edilmesini istemiyorum. – itsvetkov
Ama eğer kapsam dışında kalmasına izin verirseniz, o zaman ona erişemezsiniz (ve böylece siz sızıyorsunuz). Erişime sahip olmamanız, onunla hiçbir şey yapamayacağınız ve asıl yürütme işleyişinin hala canlı olduğu anlamına gelir, bu yüzden anlamsızdır. Not: Pratik olarak ** NEVER ** gibi bir RAW işaretçisine sahip olmalısınız. –