Могу ли я вызвать CloseHandle () сразу после успешного выполнения _beginthreadex ()? - PullRequest
7 голосов
/ 23 ноября 2011

Меня не интересует использование дескриптора, возвращенного из _beginthreadex(). Безопасно ли сразу звонить на CloseHandle()?

Я считаю, что это нужно сделать, чтобы избежать утечек памяти.

Ответы [ 2 ]

10 голосов
/ 23 ноября 2011

Да, вы можете закрыть ручку, как только решите, что она вам больше не нужна.Это не повлияет на выполнение потока.Однако вам, вероятно, следует проверить, был ли поток запущен вообще, прежде чем продолжить.

Утечки, о которых вы беспокоитесь, не утечки памяти , это утечки системных ресурсов - обычно онинамного хуже.

0 голосов
/ 23 ноября 2011

Согласно MSDN, вы не должны закрывать дескриптор, возвращаемый __beginThreadEx: _endthread автоматически закрывает дескриптор потока (тогда как _endthreadex этого не делает). Поэтому при использовании _beginthread и _endthread не закрывайте дескриптор потока явно, вызывая Win32 CloseHandle API. (Подробнее см. http://msdn.microsoft.com/en-us/library/kdzttdcb(ar-sa).aspx.)

...