OK, ich hab mir das jetzt mal mit der ThreadList angesehen. Sah schlimmer aus als es ist. Ich hab noch nicht den kompletten Code, aber der Rahmen steht. Hier mein Ergebnis:
Delphi-Quellcode:
type
TTShutDownThread = class(TThread)
private
FLock: TRTLCriticalSection;
FShutDownList : TShutDownList; // Schließliste
FWindowList : TWindowList; // Liste der aktiven Fenster
function GetWinParamObj(index: Integer): TWinParamClass;
function GetShutDownObj(index: Integer): TWinParamClass;
protected
procedure Execute; override;
procedure Lock;
procedure UnLock;
procedure UpdateWindowList; // Fensterliste aktualisieren
public
constructor Create(CreateSuspended: Boolean); reintroduce; virtual;
Destructor Destroy; override;
Procedure GetWindowList(const AList : TWindowList);
end;
implementation
{ TTShutDownThread }
constructor TTShutDownThread.Create(CreateSuspended: Boolean);
begin
inherited;
InitializeCriticalSection(FLock);
FWindowList := TWindowList.Create;
FShutDownList := TShutDownList.Create;
end;
destructor TTShutDownThread.Destroy;
begin
Lock;
try
FreeAndNil(FWindowList);
FreeAndNil(FShutDownList);
inherited Destroy;
finally
Unlock;
DeleteCriticalSection(FLock);
end;
end;
procedure TTShutDownThread.Execute;
begin
// hier die Behandlung der Listen mit vorherigen Lock und abschleißendem Unlock
end;
procedure TTShutDownThread.GetWindowList(const AList: TWindowList);
begin
Lock;
// Liste kopieren
Unlock;
end;
procedure TTShutDownThread.Lock;
begin
EnterCriticalSection(FLock);
end;
procedure TTShutDownThread.UnLock;
begin
LeaveCriticalSection(FLock);
end;
Wenn ihr der Meinung seid das ist so ok, dann hab ich's begriffen und kann die Thread als beantwortet setzen.
Dank und Gruß oki