AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Liste Thread sicher abholen

Ein Thema von oki · begonnen am 9. Jun 2008 · letzter Beitrag vom 10. Jun 2008
Antwort Antwort
Seite 5 von 5   « Erste     345   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#41

Re: Liste Thread sicher abholen

  Alt 10. Jun 2008, 16:51
Hallo oki,

ich habe an deinem Code mal noch was geändert, so ist er wohl jetzt sauber.
- Sleep wird jetzt nicht mehr in der CS ausgeführt (schlafen sollte nun wirklich unkritische sein)
- Die procedure UpdateWindowList wird nun auch benutzt (wofür war die denn gedacht?)

Delphi-Quellcode:
type
  TShutDownThread = class(TThread)
  private
    FCS: TCriticalSection; // CriticalSection
    FShutDownList : TShutDownList; // Schließliste
    FWindowList : TWindowList; // Liste der aktiven Fenster
    FInterval : Integer; // Refreshzeit in ms
  protected
    procedure Execute; override;
    procedure UpdateWindowList; // Fensterliste aktualisieren
  public
    constructor Create(CreateSuspended: Boolean); reintroduce; virtual;
    Destructor Destroy; override;

    Procedure GetWindowList(const AList : TWindowList); // Fensterliste abholen

    property Interval : Integer read FInterval write FInterval;
  end;

implementation

{ TTShutDownThread }

constructor TShutDownThread.Create(CreateSuspended: Boolean);
begin
  inherited;
  FCS := TCriticalSection.Create;
  FWindowList := TWindowList.Create;

  FShutDownList := TShutDownList.Create;

  FInterval := 200;
end;

destructor TShutDownThread.Destroy;
begin
  FCS.Enter;
  try
    FreeAndNil(FWindowList);
    FreeAndNil(FShutDownList);
    inherited Destroy;
  finally
    FCS.Leave;
    try FreeAndNil(FCS); except end;
  end;
end;

procedure TShutDownThread.Execute;
begin
  while not Terminated do begin
    UpdateWindowsList; // soll sich selbst um den kritischen teil kümmern ;)
    Sleep(Interval); // ist definitiv nicht kritisch
  end;
end;

procedure TShutDownThread.GetWindowList(const AList: TWindowList);
var
  WinParamObj: TWinParamClass;
begin
  if not Assigned(AList) then
    Exit;
  FCS.Enter;
  try
    AList.AssignList(FWindowList);
  finally
    FCS.Leave;
  end;
end;

procedure TShutDownThread.UpdateWindowList;
begin
  FCS.Enter;
  try
    FWindowList.EnumTopLevelWindows;
  finally
    FCS.Leave;
  end;
end;
cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
oki

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

Re: Liste Thread sicher abholen

  Alt 10. Jun 2008, 18:11
Hi Oliver,

klar, grundsätzlich hast du recht. Ich hatte erst mal das Schützen in Execute gesetzt, da ich hier noch weitere Methoden aufrufen wollte. Ich denke aber so wie du es korrigiert hast ist es besser. Vererbt man die Klasse ist man schnell dabei protected Methoden aufzurufen. Das würde dann bezüglich Threadsicherheit in die Hose gehen. Somit ist das aktuell zwar kein Fehler, aber dann auch nicht sauber gecodet. Und das war ja eins meiner Ziele.

Dank dir für deine Kontrolle,

Gruß oki
42
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 5   « Erste     345   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz