Also am Einfachsten/Sichersten wäre es wohl für Lese- und Schreibzugriffe je einen eigenen Positionsspeicher einzurichten (eventuell gleich direkt im Stream, um Fehler zu vermeiden).
Hab hier mal schnell 'nen kleinen Ringspeicher erstellt.
- Lese- und Schreiboperationen haben je 'ne eigene Positionsangabe
(.PositionRead und .PositionWrite)
- DataSize liefert die Größe der Daten im Speicher
(also das zwischen Lese- und Schreibposition)
- für die Kompatibilität zu TStream und Co. wird alles was .Position verwendet,
je nach Einstellung in .DefaultOperations, an das Entsprechende(Read der Write) umgeleitet
- TRingBuffer = Basistyp
TMemoryRingBuffer = Ringspeicher im RAM
TFileRingBuffer = Ringspeicher in Datei
- Pufferüberlauf wird verhindert
(beim Lesen/Schreiben wird die jeweils andere Position nicht überschritten)
- standardmäßig wird über eine CriticalSection alles threadsicher gemacht