Eine andere, zwar aufwändigere, aber dafür flexiblere Variante wäre
- direkt von TStringList abzuleiten,
- das FCriticalSection : TCriticalSection; hinzuzufügen
- und dann alles, welches in TStringList und TStrings als Virtual gekennzeichnet ist zu überschreiben
Hat noch den Vorteil, daß es wie eine normale StringListe verwendet werden kann.
Delphi-Quellcode:
procedure TThreadStringList.Lock;
begin
FCriticalSection.Acquire;
end;
procedure TThreadStringList.Unlock;
begin
FCriticalSection.Release;
end;
// und dann überall
procedure TThreadStringList.SaveToFile(const FileName: string);
begin
Lock;
try
inherited SaveToFile(FileName);
finally
Unlock;
end;
end;
function TThreadStringList.IndexOf(const S: string): Integer;
begin
Lock;
try
Result := inherited IndexOf(S);
finally
Unlock;
end;
end;
PS:
The Generics Stack
also nur zur Info ... in deinem "älteren" Delphi läuft es ja nicht