小弟学艺不精,第一次写多线程的程序,怎样才能提高它的执行效率,突出多线程的优点(现在还是会失去响应喔)....功能就是向ID为一个序列(从startnum到finishnum,由edit输入)的用户页面留言~~~
--------------------------------
unit main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP, ComCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Edit_email: TEdit;
Edit_pass: TEdit;
Button1: TButton;
Label_email: TLabel;
Label_pass: TLabel;
Memo1: TMemo;
Edit_sID: TEdit;
Edit_fID: TEdit;
Label1: TLabel;
Label2: TLabel;
Button2: TButton;
Button3: TButton;
IdHTTP1: TIdHTTP;
UpDown1: TUpDown;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
private
{ Private declarations }
public
{ Public declarations }
end;type
TThread1 = class(TThread)
private protected
procedure leaveMSG;
procedure Execute; override;
public
constructor create;
end;type
TThread2 = class(TThread)
private protected
procedure login;
procedure Execute; override;
public
constructor create2;
end;var
Form1: TForm1;
stri,surl,ak:string;
startNum:integer;
finishNum:integer;
i:integer=0;var
iThrdCnt:integer ;
Th:array[1..10] of TThread1;
th2:TThread2;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
th2:=tthread2.create2;
th2.Resume;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
IdHTTP1.HandleRedirects:=True;
IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Maxthon)';
IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
end;constructor Tthread1.create;
begin
inherited Create(True);
FreeOnTerminate := False;
end;constructor Tthread2.create2;
begin
inherited Create(True);
FreeOnTerminate := False;
end;procedure TThread2.login;
var
Params: TStrings;
Response:TStringStream;
HTML,ID,str:String;
po: integer;
begin
Response:=TStringStream.Create('');
sUrl:='http://xxxxxxx.com/Login.do';
Params:=TStringList.Create;
form1.Caption:='正在登录...';
try
Params.Add('email='+form1.Edit_email.Text);
Params.Add('password='+form1.Edit_pass.Text);
form1.IdHTTP1.Post(sUrl,Params,Response);
HTML:=utf8toansi(Trim(Response.DataString));
if pos('登录失败',HTML)>0 then
form1.Caption:='登录失败!'
else
begin po:=pos('showrelation',HTML)+12;
str:=copy(HTML,po,po+12);
ID:=copy(str,1,pos('"',str)-1);
HTML:=form1.idhttp1.get('http://xxxxxxx.com/getuser.do?id='+ID);
HTML:=utf8toansi(HTML);
po:=pos('name="ak"',HTML)+17;
ak:=copy(HTML,po,po+32);
ak:=copy(ak,1,32);
form1.Caption:='登录成功! ID:'+ID+' ak值:'+ak;
end;
finally
Params.Free;
th2.Terminate;
th2.Destroy;
end;end;procedure TThread1.leaveMSG;
var
t:TstringList;
begin
stri:=inttostr(i);
i:=i+1;
t:=TStringList.Create;
try
t.Add('curpage=');
t.Add('from=main');
t.Add('id='+stri);
t.Add('cc='+stri);
t.Add('ak='+ak);
t.Add('body='+ansitoUTF8(form1.Memo1.Text));
form1.IdHTTP1.Post(sUrl,t);
finally
t.Free;
end;
end;procedure TThread1.Execute;
begin
while i < finishNum+1 do
Synchronize(leaveMSG);
end;procedure TThread2.Execute;
begin
login;
end;procedure TForm1.Button2Click(Sender: TObject);
var
j:integer;
begin
i:=strtoint(Edit_sID.Text);
finishNum:=strtoint(Edit_fID.Text);
sUrl:='http://xxxxxx.com/gossip.do';
iThrdCnt:=Updown1.Position;
for j:=1 to iThrdCnt do
begin
th[j]:=TThread1.Create;
th[j].Resume;
end;
end;procedure TForm1.Button3Click(Sender: TObject);
var
j:integer;
begin
for j:=1 to iThrdCnt do
begin
th[j].Terminate;
th[j].Destroy;
end;
end;procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
label3.Caption:=inttostr(UpDown1.Position);
end;end.
--------------------------------
--------------------------------
unit main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP, ComCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Edit_email: TEdit;
Edit_pass: TEdit;
Button1: TButton;
Label_email: TLabel;
Label_pass: TLabel;
Memo1: TMemo;
Edit_sID: TEdit;
Edit_fID: TEdit;
Label1: TLabel;
Label2: TLabel;
Button2: TButton;
Button3: TButton;
IdHTTP1: TIdHTTP;
UpDown1: TUpDown;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
private
{ Private declarations }
public
{ Public declarations }
end;type
TThread1 = class(TThread)
private protected
procedure leaveMSG;
procedure Execute; override;
public
constructor create;
end;type
TThread2 = class(TThread)
private protected
procedure login;
procedure Execute; override;
public
constructor create2;
end;var
Form1: TForm1;
stri,surl,ak:string;
startNum:integer;
finishNum:integer;
i:integer=0;var
iThrdCnt:integer ;
Th:array[1..10] of TThread1;
th2:TThread2;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
th2:=tthread2.create2;
th2.Resume;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
IdHTTP1.HandleRedirects:=True;
IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Maxthon)';
IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
end;constructor Tthread1.create;
begin
inherited Create(True);
FreeOnTerminate := False;
end;constructor Tthread2.create2;
begin
inherited Create(True);
FreeOnTerminate := False;
end;procedure TThread2.login;
var
Params: TStrings;
Response:TStringStream;
HTML,ID,str:String;
po: integer;
begin
Response:=TStringStream.Create('');
sUrl:='http://xxxxxxx.com/Login.do';
Params:=TStringList.Create;
form1.Caption:='正在登录...';
try
Params.Add('email='+form1.Edit_email.Text);
Params.Add('password='+form1.Edit_pass.Text);
form1.IdHTTP1.Post(sUrl,Params,Response);
HTML:=utf8toansi(Trim(Response.DataString));
if pos('登录失败',HTML)>0 then
form1.Caption:='登录失败!'
else
begin po:=pos('showrelation',HTML)+12;
str:=copy(HTML,po,po+12);
ID:=copy(str,1,pos('"',str)-1);
HTML:=form1.idhttp1.get('http://xxxxxxx.com/getuser.do?id='+ID);
HTML:=utf8toansi(HTML);
po:=pos('name="ak"',HTML)+17;
ak:=copy(HTML,po,po+32);
ak:=copy(ak,1,32);
form1.Caption:='登录成功! ID:'+ID+' ak值:'+ak;
end;
finally
Params.Free;
th2.Terminate;
th2.Destroy;
end;end;procedure TThread1.leaveMSG;
var
t:TstringList;
begin
stri:=inttostr(i);
i:=i+1;
t:=TStringList.Create;
try
t.Add('curpage=');
t.Add('from=main');
t.Add('id='+stri);
t.Add('cc='+stri);
t.Add('ak='+ak);
t.Add('body='+ansitoUTF8(form1.Memo1.Text));
form1.IdHTTP1.Post(sUrl,t);
finally
t.Free;
end;
end;procedure TThread1.Execute;
begin
while i < finishNum+1 do
Synchronize(leaveMSG);
end;procedure TThread2.Execute;
begin
login;
end;procedure TForm1.Button2Click(Sender: TObject);
var
j:integer;
begin
i:=strtoint(Edit_sID.Text);
finishNum:=strtoint(Edit_fID.Text);
sUrl:='http://xxxxxx.com/gossip.do';
iThrdCnt:=Updown1.Position;
for j:=1 to iThrdCnt do
begin
th[j]:=TThread1.Create;
th[j].Resume;
end;
end;procedure TForm1.Button3Click(Sender: TObject);
var
j:integer;
begin
for j:=1 to iThrdCnt do
begin
th[j].Terminate;
th[j].Destroy;
end;
end;procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
label3.Caption:=inttostr(UpDown1.Position);
end;end.
--------------------------------
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货