переписал на Tlist Вместо Array of TA, а, в терминайте присваиваю
Создаю поток:
Код:
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;