2009-01-07 24 views
11

Sadece bir iş parçacığı oluşturmak istiyorum, sonra hemen CloseHandle'ı arayın ve iş parçacığının kendi başına ölmesine izin verin, böylece 'orijinal' iş parçacığında fazladan temizleme işi yapmak zorunda kalmam (temizlemenin zor değil) kendi içinde, ama kaçınmak istediğim fazladan bir defter tutma anlamına gelir).Sonlandırılmadan önce bir iş parçacığında CloseHandle() öğesini çağırmak mantıklı mı?

MSDN, bir iş parçacığındaki CloseHandle() öğesinin iş parçacığını sonlandırılmadığını, ancak bunun gerçekten bunu yapmasına izin verip vermediğimi belirtmem anlamına geldiğini söylüyor.

cevap

20

Sadece mantıklı değil, aynı zamanda bir sap kaçaktır. Genel olarak, başka bir yere ihtiyaç duymayacaksam, ipliği oluşturduktan hemen sonra kapatırım.

+0

+1, bu şekilde AppVerifier'i kullandığınızda yanlış pozitif sonuç almayacaksınız. –

+1

Bu, 'ExitThread() '(açıkça veya örtülü olarak adlandırılır), çıkarılan iş parçacığı içinde iş parçacığının tanıtıcısını kapattığı anlamına gelir, böylece yalnızca iş parçacığı oluşturma iş parçacığı hala tutamacı kapatmak zorundadır (yani' CreateThread() 'bir tanıtıcı sayımı oluşturur 2)? – Jori

11

CreateThread işlevi referans sayısını +2 yap, CloseHandle yalnızca referans sayısı -1 yapar, iş parçacığı bittiğinde, sistem referans sayısı -1 yapar.

İlgili konular