Nö, ist natürlich nicht threadsicher.
> Das mußt du alles absichern
BufferReadSize
BufferWriteSize
Clear
Peek
Read
Write
> Das sollte man besser auch mit absichern:
Destroy
> Nur dieses brauchst'e nicht, da dort sowieso noch kein anderer Thread drauf zugreifen kann:
Create
Falls du von extern z.B. auch noch zusammenhängend auf BufferReadSize und Peek/Read zugreifen willst, bräuchtest du noch sowas wie ein Lock und Unlock nach außen, damit man die zusammenhängenden Befehle auch zusammen absichern kann.
Delphi-Quellcode:
FIFO.Lock;
try
i := FIFO.BufferReadSize;
P := GetMem(i);
FIFO.Read(P, i);
finally
FIFO.Unlock;
end;
Ansonsten solltest du die Klasse entsprechend erweitern
Delphi-Quellcode:
function TFIFOStream.Peak(Buffer: Pointer; BufferSize: Integer): Integer;
function TFIFOStream.Read(Buffer: Pointer; BufferSize: Integer): Integer;
function TFIFOStream.Write(Buffer: Pointer; BufferSize: Integer): Integer;
So daß man nur die maximale Größe des Speichers angibt und dann über das Result erfährt, wieviel wirklich gelesen/geschrieben wurde.
Wobei man stattdessen auch einen Boolean(False) zurückgeben oder eine
Exception werfen könnte, wenn der Speicher (Count) nicht vollständig speicherbar/lesbar wäre und dabei im FIFO nix ändert.