Genau, der RingBuffer, so wie ich ihn verstehe, muss nur einmal seine Speicher-Kapazität allozieren und zeigt dann quasi nur mit Start- und Ende-Pointern auf den entsprechenden Abschnitt in seinem gesamten Speicherbereich, was den Zugriff theoretisch viel effizienter machen sollte, weil nie etwas hin- und herkopiert wird.
Dafür kann es aber auch einen Überlauf geben.
TThreadedQueue macht das genau so.
Intern speichert es einen ReadPointer "FQueueOffset mod length(fQueue)" in form eines index auf ein Array und einen WritePointer "(FQueueOffset + fQueSize) mod length(fQueue)" ebenfalls als index auf das Array fQueue.
Und da die TThreaded-Komponenten ja selbst das Threadsichere handhaben, kann man da meistens direkt auf Add/Remove/Push/Pop/... zugreifen, weil sie intern sich selbst absichern (wenn diese Methoden direkt oben public erreichbar sind)
Ich hatte halt nur irgendwie gehofft dass ein Ringspecher ohne Vollsperrung für threadsicherheit auskommen würde.
Vermutlich müsste es dafür ein Ringspeicher auf Basis einer Verkettetenliste sein?