Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#2

AW: Thread sicheren Datenpuffer

  Alt 7. Jul 2011, 18:04
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Jul 2011 um 18:09 Uhr)
  Mit Zitat antworten Zitat