Edit:
Ich sehe gerade DASS es sich bei TThreadedQueue um einen Ringbuffer handelt.
Warum wird jedesmal alles gelockt?
Ohne mir das angesehen zu haben, wie kommst Du darauf , dass eine Queue ein Ringbuffer ist?
Ich denke das Queue hat eine variable Größe/Kapazität, worauf auch diese Zeile hindeutet:
Inc(FQueueSize);
Bei einem Ringbuffer sollte es meiner Meinung nach eine feste Kapazität geben, die sich nicht vergrößert/verkleinert,
sondern überschrieben werden, wenn es über die Kapazität hinausgeht.