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方法中,开始循环了。