Habe da im Moment eine Frage, bei der ich nicht so recht weiß, ob das Thread-Safe ist oder nicht. Ich habe eine eigens erstellte Thread-sichere Klasse TApLogThreadedBuffer<T: class>, von der eine Instanz in einer anderen Klasse gekapselt wird.
Delphi-Quellcode:
TApLogErrorHandler = class(TApThreadedObject)
FItems : TApLogThreadedBuffer<TApLogErrorMessage>;
...
Nun gibts da auch die folgende Methode:
Delphi-Quellcode:
function TApLogErrorHandler.GetErrorCount(): Integer;
begin
Lock();
try
Result := FItems.Count;
finally
Unlock();
end;
end;
Nachdem hinter dem Aufruf von
FItems.Count
ja eh schon eine Thread-sichere Getter-Methode steckt könnte ich doch an dieser Stelle auf Lock() und Unlock() verzichten, oder?
PS: Lock() und Unlock() in der gezeigten Methode ruft eine andere CriticalSection auf, als die der FItems-Instanz. Wollte das nur noch geklärt haben
-- Edit: Noch ein kleiner Nachtrag: Trifft das gleiche dann auch hier zu? (hier nun ohne Lock() und Unlock())
Delphi-Quellcode:
function TApLogErrorHandler.GetItem(Index: Integer): TApLogErrorMessage;
begin
Result := FItems[Index];
end;
function TApLogErrorHandler.GetMaxBufferElements(): Integer;
begin
Result := FItems.MaxElements;
end;
procedure TApLogErrorHandler.SetMaxBufferElements(Value: Integer);
begin
FItems.MaxElements := Value;
end;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)