Akapel
22.08.2009, 19:26
Привет всем. Нужна помощь в реализации POST запроса к сайту многопоточно.
unit Unit13;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, StdCtrls;
type
TForm1 = class(TForm)
IdHTTP1: TIdHTTP;
Button1: TButton;
Memo1: TMemo;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
tnew = class(tthread)
private
s:string;
{ private declarations }
procedure addstr;
protected
procedure execute; override;
end;
var
Form1: TForm1;
http1:tidhttp;
a:longint;
IdHTTP1: TIdHTTP;
new1, new2: tnew;
implementation
{$R *.dfm}
procedure tnew.addstr;
var params,responseres:tstringlist;
label method;
begin
params:=TStringList.Create;
responseres:=TStringList.Create();
idhttp1:=TidHTTP.Create(nil);
try
//здесь параметры
responseres.text:=IDHTTP1.Post('Сайт',params);
//Тут идет условие и отсылка в мемо
finally
params.free;
responseres.free;
responseres:=nil;
params:=nil;
end;
end;
procedure tnew.execute;
begin
synchronize(addstr);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
new1 := tnew.create(true);
new1.freeonterminate := true;
new1.s := '1 thread';
new1.priority := tplowest;
new2 := tnew.create(true);
new2.freeonterminate := true;
new2.s := '2 thread';
new2.priority := tptimecritical;
new1.resume;
new2.resume;
end;
end.
Я попытался реализовать это в два потока, но отправка POST все равно идет по очереди, т.е. пока первый запрос не выполнится, второй не пойдет.
Подскажите, как лучше реализовать?
unit Unit13;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, StdCtrls;
type
TForm1 = class(TForm)
IdHTTP1: TIdHTTP;
Button1: TButton;
Memo1: TMemo;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
tnew = class(tthread)
private
s:string;
{ private declarations }
procedure addstr;
protected
procedure execute; override;
end;
var
Form1: TForm1;
http1:tidhttp;
a:longint;
IdHTTP1: TIdHTTP;
new1, new2: tnew;
implementation
{$R *.dfm}
procedure tnew.addstr;
var params,responseres:tstringlist;
label method;
begin
params:=TStringList.Create;
responseres:=TStringList.Create();
idhttp1:=TidHTTP.Create(nil);
try
//здесь параметры
responseres.text:=IDHTTP1.Post('Сайт',params);
//Тут идет условие и отсылка в мемо
finally
params.free;
responseres.free;
responseres:=nil;
params:=nil;
end;
end;
procedure tnew.execute;
begin
synchronize(addstr);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
new1 := tnew.create(true);
new1.freeonterminate := true;
new1.s := '1 thread';
new1.priority := tplowest;
new2 := tnew.create(true);
new2.freeonterminate := true;
new2.s := '2 thread';
new2.priority := tptimecritical;
new1.resume;
new2.resume;
end;
end.
Я попытался реализовать это в два потока, но отправка POST все равно идет по очереди, т.е. пока первый запрос не выполнится, второй не пойдет.
Подскажите, как лучше реализовать?