Einzelnen Beitrag anzeigen

oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#14

Re: Liste Thread sicher abholen

  Alt 9. Jun 2008, 20:37
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
42
  Mit Zitat antworten Zitat