Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

TList in Thread synchronisieren (CriticalSection)

  Alt 2. Feb 2010, 10:03
Hey,

ich habe ein kleines Problem. Und zwar habe ich eine von TThread abgeleitete Klasse, welche in einer Schleife Daten aus einer Liste bearbeitet:
Delphi-Quellcode:
while not Terminated do
begin
  for I := 0 to FList.Count - 1 do
  begin
    // blabla ..
  end;
end;
Der Thread hat entsprechende Methoden, um Daten zur Liste hinzuzufügen, zu entfernen oder zu verschieben. Jetzt habe ich ein paar Fragen:
Muss ich hier die Zugriffe überhaupt synchronisieren oder regelt TList das intern?
Wenn ja, wie mache ich das am geschicktesten?

Ich hatte mal testweise ein privates Feld CS: TCriticalSection angelegt, welches ich folgendermaßen innerhalb des Threads verwende:
Delphi-Quellcode:
while not Terminated do
begin
  CS.Enter;
  for I := 0 to FList.Count - 1 do
  begin
    // blabla ..
  end;
  CS.Leave;
end;
Die Methoden zum Ändern der Liste wurden entsprechend mit Enter und Leave geklammert.
Das Problem war nun, dass beim Aufruf von z.B. AddData() der Main Thread dauerhaft blockiert wurde, die CriticalSection im Thread also scheinbar nie released wurde.

Hat jemand da paar Tips für mich? Achso der Thread ist zeitkritisch. Einbauen von Sleep oder Ähnlichem ist hier keine Lösung.

Viele Grüße
Zacherl
  Mit Zitat antworten Zitat