Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.10.2018, 18:30
Аватар для ined
ined ined вне форума
Начинающий
 
Регистрация: 16.11.2008
Адрес: Российская Федерация!! :)
Сообщения: 165
Версия Delphi: Delphi 2010
Репутация: 1272
По умолчанию CloseHandle(IDBeginThread) внутри потока

Хочу спросить у знатоков.
Код:
var
  THid: cardinal;
  hTH: Integer;

function LoadLABEL(Parameter: Pointer): Integer;
begin
  InitL_INED(proc(Parameter));
  CloseHandle(hTH);
  EndThread(0);
end;

begin
  hTH := BeginThread(nil, 0, @LoadLABEL, nil, 0, THid);
Можно ли закрывать hTH внутри потока?
Цитата:
TThread class - Не обсуждаем!
__________________
11011111 INED Home code
VK

Последний раз редактировалось ined, 31.10.2018 в 18:48.
Ответить с цитированием
  #2  
Старый 31.10.2018, 19:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия 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 внутри потока, этот поток еще меняет какие-либо данные, а другие потоки/процессы начинают использовать их, то есть вероятность, что будут использованны неверные/неполные данные.

Последний раз редактировалось lmikle, 31.10.2018 в 19:57.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
ined (01.11.2018)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter