2011-11-23 14 views
6

_beginthreadex()'dan döndürülen tanıtıcıyı kullanmakla ilgilenmiyorum. Üzerinde hemen CloseHandle() aramak güvenli midir?_beginthreadex() öğesi başarılı olduktan hemen sonra CloseHandle() öğesini arayabilir miyim?

Bu, bellek sızıntılarını önlemek için yapılması gerektiğine inanıyorum.

+1

Kaynak sızıntısından kaçınmak için tutamağı kapatmanız gerekir, ancak iş parçacığı başlatıldıktan hemen sonra iş parçacığı, iş parçacığı ile iş parçacığı tamamlandığında eşitleme (bekletme) yapamazsınız. Ve evet, bu güvenli. –

+0

_beginthreadex tarafından döndürülen tanıtıcıyı hemen kapatsanız bile iş parçacığıyla eşitlemenin başka bir yolu daha vardır. İş parçacığı kendi iş parçacığına GetCurrentThreadId aracılığıyla erişebilir ve ana iş parçacığına iletebilir. Sonra, bu iş parçacığı kimliğinden yeni bir tanıtıcı elde etmek için her zaman OpenThread (SYNCHRONIZE izniyle) öğesini çağırabilirsiniz. –

cevap

9

Evet, artık bu tanıtıcıya ihtiyacınız olmadığına karar vermez kolu kaldırabilirsiniz. Bu, iş parçacığının yürütülmesini etkilemez. Ancak, ilerlemeden önce iş parçacığının başlamış olup olmadığını kontrol etmelisiniz.

Endişeyle ilgili endişeleriniz bellek kaçakları değil, sistem kaynakları sızıntısıdır - genellikle çok daha kötüdürler.

+0

Teşekkürler. Yeni oluşturulmuş iş parçacığı gerçekten başlatılmasının en iyi yolu nedir? – user1061590

+0

@ user1061590: "En iyi" bir yol yok, ancak başarılı olduğundan emin olmak için '_beginthreadex()' tarafından döndürülen değeri kontrol etmelisiniz. – sharptooth

-1

MSDN göre, __beginThreadEx tarafından döndürülen kolu kapatın olmamalıdır: otomatik iplik tanıtıcı kapatır _endthread _beginthread ve _endthread kullanırken .Bu nedenle, açıkça arayarak iplik kolu kapatmayın (_endthreadex bunu yapmaz) Win32 CloseHandle API'si. (Ayrıntılar için bkz. http://msdn.microsoft.com/en-us/library/kdzttdcb(ar-sa).aspx)

+1

Bu bölüm farklı bir işlevden bahsediyor. "** _ beginthread ** ve _endthread'i kullanırken," thread tutamacını "ve" _beginthreadex ** tarafından döndürülen tutamaç, _beginthreadex arayanın tarafından kapatılmalıdır "şeklindeki ifadesini kapatmayın. –

+0

yardımcı olur^_ ^ – YoungLearner

İlgili konular