DELPHI 多线程 IDHTTP提交问题
delphi中,我想使用多线程用idhttp提交数据包,例如:varidhttp:tidhttp;psdata:string;beginidhttp:=tidhttp.C...
delphi中,我想使用多线程用idhttp提交数据包,例如:
var
idhttp:tidhttp;
psdata:string;
begin
idhttp:=tidhttp.Create(nil);
idhttp.post('http://xxx.xxx.xxx',psdata);
end;
提交100次。
我想限制线程数为特定的值。
我所需要的是创建5个线程,完成一个再创建一个,线程总数不大于五。
我在网上找到个多线程的,但是不符合我的要求,它的没有线程数的控制,假如我设置延时为1秒的话,那线程就是1秒创建一个,如果10秒内线程还没结束的话,那就有10个线程在工作了,这不是我想要的。
高分求代码,而不是大概方法。。。 展开
var
idhttp:tidhttp;
psdata:string;
begin
idhttp:=tidhttp.Create(nil);
idhttp.post('http://xxx.xxx.xxx',psdata);
end;
提交100次。
我想限制线程数为特定的值。
我所需要的是创建5个线程,完成一个再创建一个,线程总数不大于五。
我在网上找到个多线程的,但是不符合我的要求,它的没有线程数的控制,假如我设置延时为1秒的话,那线程就是1秒创建一个,如果10秒内线程还没结束的话,那就有10个线程在工作了,这不是我想要的。
高分求代码,而不是大概方法。。。 展开
2个回答
展开全部
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TMyThread = class(TThread)
private
{ Private declarations }
procedure AddTh;
procedure DecTh;
protected
procedure Execute; override;
end;
TForm1 = class(TForm)
Edit1: TEdit;
Timer1: TTimer;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
ThCounter:integer;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ThCounter:=0;
end;
{ TMyThread }
procedure TMyThread.AddTh;
begin
Form1.ThCounter:= Form1.ThCounter +1;
Form1.Edit1.Text:= intToStr(Form1.ThCounter);
end;
procedure TMyThread.DecTh;
begin
Form1.ThCounter:= Form1.ThCounter -1;
Form1.Edit1.Text:= intToStr(Form1.ThCounter);
end;
procedure TMyThread.Execute;
var
i:integer;
begin
inherited;
Synchronize(AddTh);
sleep(10000);
Synchronize(DecTh);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
th:TMyThread;
begin
if(Form1.ThCounter<5) then
begin
th:= TMyThread.Create(true);
th.FreeOnTerminate:=true;
th.Resume();
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TMyThread = class(TThread)
private
{ Private declarations }
procedure AddTh;
procedure DecTh;
protected
procedure Execute; override;
end;
TForm1 = class(TForm)
Edit1: TEdit;
Timer1: TTimer;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
ThCounter:integer;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ThCounter:=0;
end;
{ TMyThread }
procedure TMyThread.AddTh;
begin
Form1.ThCounter:= Form1.ThCounter +1;
Form1.Edit1.Text:= intToStr(Form1.ThCounter);
end;
procedure TMyThread.DecTh;
begin
Form1.ThCounter:= Form1.ThCounter -1;
Form1.Edit1.Text:= intToStr(Form1.ThCounter);
end;
procedure TMyThread.Execute;
var
i:integer;
begin
inherited;
Synchronize(AddTh);
sleep(10000);
Synchronize(DecTh);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
th:TMyThread;
begin
if(Form1.ThCounter<5) then
begin
th:= TMyThread.Create(true);
th.FreeOnTerminate:=true;
th.Resume();
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
end.
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询