Показать сообщение отдельно
  #2  
Старый 31.10.2018, 19:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, если верить MSDN, то можно:

Цитата:
Сообщение от MSDN
Closing a thread handle does not terminate the associated thread or remove the thread object. Closing a process handle does not terminate the associated process or remove the process object. To remove a thread object, you must terminate the thread, then close all handles to the thread. For more information, see Terminating a Thread. To remove a process object, you must terminate the process, then close all handles to the process. For more information, see Terminating a Process.

Т.е. при вызове CloseHandle просто счетчик будет уменьшен на 1. Если он станет равным 0, то хэндл, сам хэндл, а не поток или процесс, будет удален из списка системных объектов.
Т.е. если другие потоки/процессы ждут освобождения хэндла, то они продолжат выполнение.
Из подводных камней.
1. При повторном вызове CloseHandle, например, в вызывающем коде, будет ошибка.
2. Если после CloseHandle внутри потока, этот поток еще меняет какие-либо данные, а другие потоки/процессы начинают использовать их, то есть вероятность, что будут использованны неверные/неполные данные.
Ответить с цитированием