遇到问题:
1,,假设我要运行100次,使用10个线程,如何实现等这10个线程结束后再执行?我开始用for 10,,,,10,,似乎一次就100全出来了。
2,,就是执行时开始都好的,执行个63条就挂了,不动了。。网上找了好多资料,都用ado不安全,不过我也动态创建了DataModule2,应该不会有问题才对??
请各位大虾指点在下在此谢过。。
本人水平比较差,希望能给出详细点的解析配上代码,谢。for ii:=1 to 10 do //adoquery1.RecordCount do
begin
if not adoquery1.eof then
begin
ssii[ii]:=adoquery1.fieldbyname('a1').asstring;
Mya[ii]:=MyThread.create(ssii[ii],ii);//这里我传递参数启动线程
ThreadsRunning:=10; //运行的线程数量
Mya[ii].OnTerminate := ThreadDone;        
adoquery1.Next;
end;
end;================
线程里面//执行
procedure MyThread.Execute;
begin
if Terminated then Exit;    //是否退出
//Messagebox(0, PAnsiChar('aUpUrl  '+aUpUrl+'   asUpFileName '+asUpFileName+' aspath'+aspath), 'OK', MB_OK);
entercriticalsection(lj);     //进入临界资源  如edit1.text:=...startupdate(ageturl,aai);
FreeOnTerminate :=True;//线程终止时自动删除对象
//Synchronize(Execute);    // 使用时可能会按顺序,不过会假死
leavecriticalsection(lj);    //退出临界资源{
lj是我定义临界区的变量
在execute中用来进来临界区和退出临界区……
}
end; 
==============
constructor MyThread.Create(geturl:string;i:integer);
begin
inherited Create(False);
ageturl:=geturl;
aai:=i;
initializecriticalsection(lj);
FreeOnTerminate := True;
end;==========
DataModule2: TDataModule2;
adoquery1:TadoQuery; 
begin
try
iii:=i;
try
CoInitialize(nil);
          DataModule2.Create(nil);
          DataModule2.adoquery1.SQL.clear;
          DataModule2.adoquery1.SQL.Add('Select * From toget');
          DataModule2.adoquery1.Open;