Indy и блокирующий режим.
При использовании методов Get и Post у компонента IdHTTP программа "замораживается" на те несколько секунд, пока запрос не будет выполнен. В "Indy in depth" упоминается компонент IdAntiFreeze, который должен убирать этот недостаток. Тем не менее, при размещении на форме моей программы этого компонента никаких изменений не наблюдается. Я что-то делаю не так?
Вот главный модуль:
Код:
unit Main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdCookieManager,
StdCtrls, XPMan, IdMultipartFormData;
type
TMainForm = class(TForm)
IdCookieManager: TIdCookieManager;
IdAntiFreeze: TIdAntiFreeze;
IdHTTP: TIdHTTP;
Timer: TTimer;
ProgressBar: TProgressBar;
Button: TButton;
procedure ButtonClick(Sender: TObject);
procedure TimerTimer(Sender: TObject);
private
public
end;
var MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TMainForm.ButtonClick(Sender: TObject);
var response: TStringStream;
begin
response := TStringStream.Create('');
with IdHTTP.Request do begin
UserAgent :=
'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.10';
Host := 'www.delphisources.ru;
Accept := 'text/html, application/xml;q=0.9, application/xhtml+xml,'
+ ' image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1';
AcceptLanguage := 'ru-RU,ru;q=0.9,en;q=0.8';
AcceptCharSet := 'iso-8859-1, utf-8, utf-16, *;q=0.1';
AcceptEncoding := 'deflate, gzip, x-gzip, identity, *;q=0';
Referer := 'http://www.delphisources.ru/';
Connection := 'Keep-Alive, TE';
end;
IdHTTP.HandleRedirects := true;
IdHTTP.Get('http://www.delphisources.ru/', response);
end;
procedure TMainForm.TimerTimer(Sender: TObject);
begin
if ProgressBar.Position >= ProgressBar.Max then
ProgressBar.Position := 0;
ProgressBar.Position := ProgressBar.Position + 1;
end;
end.
При нажатии кнопки хорошо видно, как прогрессбар на несколько секунд притормаживает.
Если это важно, у меня Borland Developer Studio 2006.
Да, и ещё. Я пытался разместить IdHTTP в потоке - ничего не изменилось.
Последний раз редактировалось Horned_Reaper, 27.12.2009 в 18:26.
|