|
|
#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. |