Indy TCP - Leer datos en un bucle

Un servidor TCP está enviando marcos de datos continuamente cada 8 ms. Quiero programar un cliente capaz de recibir estos marcos de datos. ¿Hay algún procedimiento en Indy 9 para saber si hay datos disponibles en el búfer?

Mis programas actuales son los siguientes (estoy usando un subproceso):

procedure TThreadRead.Execute;
var
  buffer: array [0..755] of byte;
  //s1: string;
  //i: integer;
begin
  IdTCPClient1.RecvBufferSize:= 756;
  IdTCPClient1.Connect;
  while Terminated = false do
  begin
    if IdTCPClient1.InputBuffer.Size = 0 then
       IdTCPClient1.ReadFromStack(True,0,False);
    while IdTCPClient1.InputBuffer.Size > 0 do
    begin
       ReadBuffer(buffer, FClient.InputBuffer.Size);
       //s1:= '';
       //For i:=0 To Length(buffer)-1 Do
       //  s1:=s1+IntToHex(Ord(buffer[i]),2); //Read values-->global var
       //Form1.Memo1.Text:=s1;
    end;
  end;
end;

¿Hay alguna solución más eficiente para leer datos TCP de forma continua (como un evento no leído en UDP)?

Gracias por adelantado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta