unit Main;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB,ActiveX;type
TForm1 = class(TForm)
Button1: TButton;
ADOQuery1: TADOQuery;
Edit1: TEdit;
Lab: TLabel;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TTestThread = class(TThread)
private
a,count:integer;
betweentime :TDateTime;
procedure GiveCountnum;
protected
procedure Execute; override;
public
constructor Create(b:integer); virtual;
end;
var
Form1: TForm1;
myado:array of TADOQuery;
testThread : array of TTestThread ;
myLab:array of TLabel;
between:Tdatetime;
countnum:integer;
implementation{$R *.dfm}
constructor TTestThread.Create(b: integer);
begin
a:=b;
inherited Create(false);
FreeOnTerminate := False;
end;procedure TTestThread.GiveCountnum;
begin
countnum:=count;
between:=betweentime;
end;
procedure TTestThread.Execute;
var
begintime,endtime:TDateTime;
begin
//coinitialize(nil);
begintime:=time;
myado[a].Open; //执行到这里为什么开始循环了,不继续向下执行。
count:=myado[a].Fields[0].AsInteger;
endtime:=time;
betweentime:=endtime-begintime;
Synchronize(GiveCountnum);
//couninitialize;
//FreeOnTerminate := false;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
setlength(myado,strtoint(edit1.Text));
setlength(testThread,strtoint(edit1.Text));
setlength(mylab,strtoint(edit1.Text));
for i:=0 to strtoint(edit1.Text)-1 do
begin
myado[i]:=TADOQuery.Create(self);
myado[i].ConnectionString:='Provider=SQLOLEDB.1;Password=jycc;Persist Security Info=True;User ID=sa;Initial Catalog=gome-new';
myado[i].Close;
myado[i].SQL.Clear;
myado[i].SQL.Add('select count(*) from usr_zxthh'); myLab[i]:=TLabel.Create(self);
myLab[i].Parent:=self;
myLab[i].Left:=i*200;
myLab[i].Top:=50; end;
for j:=0 to strtoint(edit1.Text)-1 do
begin
testThread[j] := TTestThread.Create(j);
//if testThread[i].Suspended then testThread[i].Resume else testThread[i].Suspend;
myLab[j].Caption:='线程'+inttostr(j+1)+'执行时间:'+TimetoStr(between)+'结果:'+inttostr(countnum);
end;end;procedure TForm1.FormDestroy(Sender: TObject);
var
k:integer;
begin
for k:=0 to strtoint(edit1.Text)-1 do
begin
testThread[k].Terminate;
testThread[k].Destroy;
end;
end;end.为什么执行到线程的execute方法中,开始循环了。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB,ActiveX;type
TForm1 = class(TForm)
Button1: TButton;
ADOQuery1: TADOQuery;
Edit1: TEdit;
Lab: TLabel;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TTestThread = class(TThread)
private
a,count:integer;
betweentime :TDateTime;
procedure GiveCountnum;
protected
procedure Execute; override;
public
constructor Create(b:integer); virtual;
end;
var
Form1: TForm1;
myado:array of TADOQuery;
testThread : array of TTestThread ;
myLab:array of TLabel;
between:Tdatetime;
countnum:integer;
implementation{$R *.dfm}
constructor TTestThread.Create(b: integer);
begin
a:=b;
inherited Create(false);
FreeOnTerminate := False;
end;procedure TTestThread.GiveCountnum;
begin
countnum:=count;
between:=betweentime;
end;
procedure TTestThread.Execute;
var
begintime,endtime:TDateTime;
begin
//coinitialize(nil);
begintime:=time;
myado[a].Open; //执行到这里为什么开始循环了,不继续向下执行。
count:=myado[a].Fields[0].AsInteger;
endtime:=time;
betweentime:=endtime-begintime;
Synchronize(GiveCountnum);
//couninitialize;
//FreeOnTerminate := false;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
setlength(myado,strtoint(edit1.Text));
setlength(testThread,strtoint(edit1.Text));
setlength(mylab,strtoint(edit1.Text));
for i:=0 to strtoint(edit1.Text)-1 do
begin
myado[i]:=TADOQuery.Create(self);
myado[i].ConnectionString:='Provider=SQLOLEDB.1;Password=jycc;Persist Security Info=True;User ID=sa;Initial Catalog=gome-new';
myado[i].Close;
myado[i].SQL.Clear;
myado[i].SQL.Add('select count(*) from usr_zxthh'); myLab[i]:=TLabel.Create(self);
myLab[i].Parent:=self;
myLab[i].Left:=i*200;
myLab[i].Top:=50; end;
for j:=0 to strtoint(edit1.Text)-1 do
begin
testThread[j] := TTestThread.Create(j);
//if testThread[i].Suspended then testThread[i].Resume else testThread[i].Suspend;
myLab[j].Caption:='线程'+inttostr(j+1)+'执行时间:'+TimetoStr(between)+'结果:'+inttostr(countnum);
end;end;procedure TForm1.FormDestroy(Sender: TObject);
var
k:integer;
begin
for k:=0 to strtoint(edit1.Text)-1 do
begin
testThread[k].Terminate;
testThread[k].Destroy;
end;
end;end.为什么执行到线程的execute方法中,开始循环了。
解决方案 »
- 如何用delphi在Access库中创建一个查询,相当于sql中的视图。请高手指点。
- Delphi服务程序问题
- 调用dll的问题
- 登入问题
- 谁能给出TList、TCollection、TStack、TBucketList、TQueue、TOrderedList的例子
- 关于异或运算
- Delphi5.0的安装问题
- 急急!!!!请问TGIF控件哪儿有下????
- 昨天我挖苦心思都没想出来的三个问题终于沉冤得雪了。。。(就是Query和dBASEIII的问题)
- delphi做的程序执行几次后会没有反映,问题大概会出在哪里?
- Windows Media Player播放完某一视频,让其停止而不是显示黑屏,谢谢~~
- FASTREPORT可以做这种报表吗?
Synchronize()去执行!
begin
begintime:=time;
myado[a].Open;
count:=myado[a].Fields[0].AsInteger;
endtime:=time;
betweentime:=endtime-begintime;
countnum:=count;
between:=betweentime;
end;procedure TTestThread.Execute;
begin
Synchronize(GiveCountnum);
end;to:chenzhuo(灼) 是这样的吗,还是不行啊,谢谢!