Hallo...
Zitat:
Wo ist der Sync, der Wait, der Terminate usw.
...alles im Threadrumpf bzw der Liste.
Delphi-Quellcode:
const
PM_Finish_Thread = WM_USER + 1;
procedure TdWorkerList<T>.Remove(aThread: TThread);
begin
aThread.Terminate;
aThread.WaitFor;
aThread.Free;
inherited Remove(aThread);
end;
procedure TdWorkerList<T>.TreadFinished(var Msg: TMessage);
begin
if (not FDestroying) and (Msg.Msg = PM_Finish_Thread) then
begin
Remove(TThread(Msg.wParam));
end;
end;
Der Thread selbst schickt eine Message an die Liste das er fertig ist.
Delphi-Quellcode:
procedure TWorker.DoOnTerminate(Sender: TObject);
begin
PostMessage(FListHandle, PM_Finish_Thread, wParam(Self), 0);
end;
Letztendlich ist das alles unerheblich. Der Thread ist
definitiv fertig und
freigegeben. Das schließt dieses Konstukt aus. Ich hatte gehofft das ihr andere Ideen habt.