Вызов CloseHandle после вызова SetEvent - PullRequest
4 голосов
/ 23 июня 2011

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

  1. Вызов CloseHandle события сразу после вызова SetEvent
  2. Звонок CloseHandle после линии WaitForSingleObject

Пожалуйста, предложите мне, какой из подходов правильный.

Ответы [ 3 ]

5 голосов
/ 23 июня 2011

Закройте дескриптор, когда все потоки закончили использовать его.После того, как WaitForSingleObject покажется мне разумным (потому что, если это удастся, SetEvent должен завершиться).

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

2 голосов
/ 23 июня 2011

Закрыть дескриптор события, когда вы уверены, что событие выполнило свою работу и больше не нужно.В вашем случае это после того, как вы обнаружите, что это было установлено.Поэтому закрывайте дескриптор события после WaitForSingleObject разблокировки.

2 голосов
/ 23 июня 2011

Звонить CloseHandle после SetEvent не имеет смысла для меня. Вам следует (если требуется) позвонить CloseHandle только после WaitForSingleObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...