Показать сообщение отдельно
  #8  
Старый 01.05.2017, 16:09
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Bargest
Поток делфи - TThread - это объект (кусок памяти), с которым ассоциирована внутренняя структура ОС под названием "поток".
В массиве (который в данном случае вообще непонятно зачем существует, если используется только один поток) хранится указатель на этот объект, то есть просто адрес ("номер") объекта (куска памяти).

Если снести жилой дом, его адрес же не исчезнет сам из всех справочников, верно? Точно так же и указатель на удаленный объект (адрес куска памяти) сам не исчезнет ниоткуда, пока ты руками не удалишь его. Сохранял его в переменной - он останется в переменной. Сохранял в массиве - он останется в массиве.
Поэтому, очевидно, если указатель на поток должен удаляться из какой-то коллекции (в данном случае - массива), нужно в момент удаления объекта TThread убирать указатель на него самому. NumLock об этом уже написал.
А Self в методе потока Terminate - просто еще одна копия адреса этого объекта. От её зануления ничего во внешнем массиве не изменится.
Тогда как мне сделать нужную мне вещь? Ведь если написать WaitFor, то встанет главный поток и потеряется весь смысл в дочернем потоке.

Кратко цель: главный поток нечто ищет, когда нашел, создал доч-поток, который отсчитал время( условно) - удалил это нечто и удалился сам. Если таких объектов много, то и время считается независимо.
То есть главное, чтобы во время счета продолжался поиск.
Ответить с цитированием