![]() |
|
|
|
|
#1
|
|||
|
|||
|
есть некий поток дочерний. в главном он объявлен как массив
Код:
fNewTh: array [1..12]of Arr; Код:
i:= Length(fNewTh)+1; fNewTh[i]:=Arr.Create(); Последний раз редактировалось nixon232, 29.04.2017 в 12:52. |
|
#2
|
|||
|
|||
|
Получается, что поток (а наверное ссылка), остается в FNewTh[i]? потому что он не равен Nil?
Код:
for i := 1 to 12 do
begin
TMP:= fNewTh[i];
if not Assigned(tmp) thenтогда где ему нил присвоить если мы не мониторим завершение экземпляра? |
|
#3
|
||||
|
||||
|
А и не должно значение само в nil сбрасывается. Делай это при завершении потока. Вариантов много.
|
|
#4
|
|||
|
|||
|
Цитата:
Код:
self:=nil; По дебагеру видно, что остались внутпеные даннык которые были созданы в Create Код:
begin inherited Create(False); a:=RBTN; b:= CBTN; c:=time; d:=id; FreeOnTerminate:=True; OnTerminate:=WBTerminate; end; Последний раз редактировалось nixon232, 30.04.2017 в 12:32. |
|
#5
|
|||
|
|||
|
Странно, но если в главном потоке послать такое, то ошибок нет и он оба раза шлет сигнал на поток
Код:
begin
FreeAndNil(FLock);
FBan.Free;
for i := 1 to 12 do
begin
tmp:= fNewTh[i];
if tmp<>nil then
tmp.Terminate;
end;
for i := 1 to 12 do
begin
tmp:= fNewTh[i];
if tmp<>nil then
fNewTh[i].Terminate;
end;
inherited Destroy;
end;Последний раз редактировалось nixon232, 30.04.2017 в 19:41. |
|
#6
|
|||
|
|||
|
переписал на Tlist Вместо Array of TA, а, в терминайте присваиваю
Код:
Self:=nil Код:
fNewTh.Add(TA.Create(....)); Код:
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; Последний раз редактировалось nixon232, 01.05.2017 в 14:42. |