Я создал простое приложение для мониторинга веб-сайтов, используя компонент Indy TIdhttp.Я хочу определить, когда назначенная страница не возвращается в течение определенного периода времени (я использую 5000 миллисекунд).В качестве теста я создал страницу на веб-сайте, на которую умышленно уходит 15 секунд, чтобы ответить.Но я не могу заставить свою процедуру «сдаться» через 5 секунд.Я попытался ReadTimeout , предлагаемое решение с использованием таймера и события OnWorkBegin (так и не удалось заставить OnWorkBegin срабатывать сразу послеполучить вызов).
Примечание Меня не беспокоит тайм-аут соединения.Меня беспокоит то, что сервер должен вернуть страницу со временем ожидания.
Вот некоторый исходный код, который я использовал.Он содержит много элементов, на которые я ссылаюсь.
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;