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

переписал на Tlist Вместо Array of TA, а, в терминайте присваиваю
Код:
 Self:=nil
Создаю поток:
Код:
       fNewTh.Add(TA.Create(....));
Он себе спокойно отрабатывает, доходит до дестроя, но при такой проверке пытается уничтожить объект, которого нет, получает отказв доступе код 5 и вылетает
Код:
begin

  FreeAndNil(FLock);
  FBan.Free;

  begin
//  Cursor := crHourGlass;
  try
   if fNewTh.Count>0 then

    for i := fNewTh.Count - 1 downto 0 do
    begin
      if assigned(fNewTh[i]) then
      begin
        tmp:=fNewTh[i];
        TA(fNewTh[i]).Terminate; // terminate thread
        TA(fNewTh[i]).WaitFor; // make sure thread terminates
      end;
    end;
    fNewTh.Clear;
Уже Даже идей нет, что не так.

_____________________________АПД
Если прописать так терминейт, то ошибки нет, но во-первых это бред так делать, а во-вторых объект-то остался.
Код:
procedure TA.Terminate(Sender : TObject);
begin

//Self:=nil;
MainThread.fNewTh.Delete(fIndex);

end;
Ответить с цитированием