2014-01-29 2 views
3

Я читал http://support.microsoft.com/kb/243953, где объясняют, как ограничить приложение одним экземпляром. Мютекс создается при строительстве и уничтожении, они называют CloseHandle.Требуется ли CloseHandle?

Это заставило меня думать, звонит CloseHandle строго, даже если приложение будет закрыто? Во многих программах freebsd c часто используется практика не освобождения памяти malloced, поскольку ОС будет быстрее очищать ее при уничтожении. Не удалось вызвать CloseHandle, связать ресурсы в ОС, даже если процесс завершился?

+1

ОС очистит его. Если вы работаете над чем-то более сложным, чем пример приложения, очистка - это хороший способ не забывать, когда это становится обязательным позже (как правило, с переносом кода/заимствованием в другое программное обеспечение). –

ответ

10

Не удалось вызвать CloseHandle связать ресурсы в ОС, даже если процесс закрыт?

Нет. Когда процесс завершается, ОС неявно выпускает любые ручки, которые он хранит, точно так же, как и с выделенной памятью.

С точки зрения системы недостатком не закрывающих ручек является то же самое, что и недостаток освобождения памяти: вы не позволяете ОС освобождать логически неиспользуемые ресурсы, пока процесс все еще запущен.

С точки зрения разработчика недостатком является то, что нет возможности автоматически разбивать выделенные ресурсы на группы «утечки по назначению» и «утечка из-за ошибки». Когда (возможно, нет, если) в какой-то момент вы поймете, что ваше приложение теряет ресурсы, которых действительно не должно быть, открытые дескрипторы, подобные этим, затруднят вашу жизнь, помогая реальной проблеме спрятаться между ложными выводами.

Смежные вопросы