Einzelnen Beitrag anzeigen

oki

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

Re: Liste Thread sicher abholen

  Alt 10. Jun 2008, 10:50
Oh Backe, da läuft mächtig was schief. So geht es nicht. Folgendes Problem:
Mein Thread läuft sauber und ordentlich und arbeitet seine Execute-Methode ab.
Delphi-Quellcode:
procedure TShutDownThread.Execute;
begin
  while not Terminated do begin
    Lock;
    try
      FWindowList.EnumTopLevelWindows; // interne liste aktualisieren
      Sleep(Interval); // warte mal die eingestellte Zeit, nicht so 'ne Hektik (prefered 200)
    finally
      Unlock;
    end;
  end;
end;
Ok, sieht ja mal simpel und somit gut aus.

Jetzt meine Public-Methode des Threads zum Abholen der Werte der Liste.
Delphi-Quellcode:
procedure TShutDownThread.GetWindowList(const AList: TWindowList);
var
  WinParamObj: TWinParamClass;
begin
  if not Assigned(AList) then
    Exit;
  Lock;
  try
    AList.AssignList(FWindowList);
  finally
    UnLock;
  end;
end;
AssignList habe ich an dieser Stelle zusätzlich implementiert. Ist auch logisch und kein Hit. Sollte jemand damit Sorgen haben poste ich den Code.

Nun passiert folgendes. Rufe ich in meinem Programm diese Methode auf
Delphi-Quellcode:
procedure TForm1.RefreshWindowList;
var
  WindowList: TWindowList;
begin
  if assigned(FShutDownThread) then
  begin
    WindowList := TWindowList.Create;
    try
      FShutDownThread.GetWindowList(WindowList);
      ........
steht die Anwendung.
Ich habe mit dem Debugger die entsprechende Stelle gefunden. Es ist der Aufruf Lock in der Thread-Methode GetWindowList. Lock implementiert hier
Delphi-Quellcode:
procedure TShutDownThread.Lock;
begin
  EnterCriticalSection(FLock);
end;
Genau aus EnterCriticalSection kehrt die Procedur nicht zurück.

Da läuft doch was schief in meiner Logik. ich denke mal ich habe das was entscheidendes in der Handhabung der CriticalSection nicht verstanden oder bringe was in der Abarbeitung des Threads furcheinander. Das ist doch nur ein Verständnis und Handlingproblem meinerseits?

Wenn mir da mal einer auf die Sprünge helfen kann, währe toll.

Gruß oki
42
  Mit Zitat antworten Zitat