¿Hay alguna manera de establecer el tiempo de espera de respuesta para Indy Tidhttp?

He creado una aplicación de monitoreo de sitios web simple usando el componente Indy TIdhttp. Quiero detectar cuando una página designada no se devuelve dentro de un período de tiempo especificado (estoy usando 5000 milisegundos). Como prueba, creé una página en un sitio web que intencionalmente tarda 15 segundos en responder. Pero no puedo hacer que mi procedimiento "se rinda" después de los 5 segundos. Yo he tratadoReadTimeout, unasolución sugerida usando un temporizador y elOnWorkBegin evento (nunca pudo obtenerOnWorkBegin disparar inmediatamente después de recibir la llamada).

Nota No estoy preocupado por un tiempo de espera de conexión. Mi preocupación aquí es un tiempo de espera para que el servidor regrese con una página.

Aquí hay un código fuente que he estado usando. Contiene muchos de los elementos a los que me refiero.

procedure TServLogic.WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
  GetTimer.Enabled := True;
end;
procedure TServLogic.WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
  GetTimer.Enabled := False;
end;

procedure TServLogic.GetTimerTimer(Sender: TObject);
begin
  idHttp.Disconnect(True);
end;

procedure TServLogic.CallHttp(mlink: String): String;
begin
  result := '';
  GetTimer := TTimer.create(nil);
  GetTimer.OnTimer := GetTimerTimer;
  GetTimer.Interval := 5000;
  try
    IdHTTP := TIdHTTP.create(nil);
    idhttp.ReadTimeout := 5000;
    IdHttp.OnWorkBegin := WorkBegin;
    IdHttp.OnWorkEnd   := WorkEnd;
    try
      result  := idhttp.get(mLink);
    except
      on e:exception do begin
        AppendToLog('Server did not respond withing 5 seconds');
      end;
    end;
  finally
    GetTimer.Free;
    idhttp.free;
  end;
end;

Respuestas a la pregunta(2)

Su respuesta a la pregunta