Gibt es eine Möglichkeit, das Antwortzeitlimit für Indy Tidhttp festzulegen?

Ich habe eine einfache Website-Überwachungsanwendung mit der Indy TIdhttp-Komponente erstellt. Ich möchte erkennen, wenn eine bestimmte Seite nicht innerhalb eines bestimmten Zeitraums zurückgegeben wird (ich verwende 5000 Millisekunden). Als Test habe ich eine Seite auf einer Website erstellt, für deren Beantwortung absichtlich 15 Sekunden benötigt werden. Aber ich kann meine Prozedur nicht dazu bringen, nach den 5 Sekunden "aufzugeben". Ich habe versucht ReadTimeout, einvorgeschlagene Lösun mit einem Timer und dem OnWorkBegin event (konnte nie @ bekomm OnWorkBegin um sofort nach dem get call zu feuern.

Hinwei Ich mache mir keine Sorgen um eine Verbindungsunterbrechung. Mein Anliegen ist hier eine Zeitüberschreitung für den Server, um mit einer Seite zurückzukehren.

Hier ist ein Quellcode, den ich verwendet habe. Es enthält viele der Elemente, auf die ich verweise.

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;

Antworten auf die Frage(4)

Ihre Antwort auf die Frage