比如我想创建5个线程,我如何判断其中一个已经结束?
例如:
var
test1: array of test;  //test为继承的TThread
i:integer;
x:=array of string;
begin
for i := 0 to 9 do
  begin
    test1[i] := test.create(x[j]);
  end;
end;我该如何判断第几个已经结束,然后释放该线程,然后再创建它??

解决方案 »

  1.   

    var
      test1: array of test;  //test为继承的TThread
      i : integer;
      x : array of string;procedure TForm1.ThreadTerminate(Sender: TObject);
    var
      iIndex : Integer;
      iLoop : Integer;
    begin
      iIndex := -1;
      for iLoop := 0 to 9 do
        if test1[iLoop].ThreadID = test(Sender).ThreadID then
        begin
          iIndex := iLoop;
          break;
        end;
      if iIndex <> -1 then
      begin
        //test1[iIndex]线程已经终止
        //在此处加上你自己的处理代码
      end;
    end;begin
      for i := 0 to 9 do
      begin
        //test的constructor Create函数必须要加上Suspended参数, 即
        //constructor Create(Suspended: Boolean;  ......);
        test1[i] := test.Create(True, x[j]);
        test1[i].OnTerminate := ThreadTerminate;
        test1[i].Resume;
      end;
    end;