有部分代码,要在线程结束后才能执行,但不知如何确定线程结束后再执行?
如果在代码中直接ITHREAD.RESUME语句后写代码,程序就会在线程还没有执行完的情况下执行后面的代码了,请问高手如何解决?

解决方案 »

  1.   

    在该线程中定义一个方法。然后 在execute的最后用Synchronize(该方法)调用这个方法。
    例:
    type
     TTestThread = class(TThread)
      protected
       procedure DoSth;
       procedure Execute;override;
     end;procedure TTestThread.DoSth;
    begin
      MainForm.Edit1.Text := '线程执行完毕';
    end;
    procedure TTestThread.Execute;
    begin
      //
      //线程工作
      //
      Synchronize(DoSth);
    end;
      

  2.   

    type
      TSec = class(TThread)
      private
        { Private declarations }
      protected
        procedure Execute; override;
      end;  TForm1 = class(TForm)
        ...
      private
        procedure ThreadOnTerminate(Sender: TObject);
    ...procedure TForm1.ThreadOnTerminate(Sender: TObject);
    begin
      //不能在这里面执行线程=nil的操作
      MessageBox(Handle, '线程结束后要执行的代码', '提示', MB_OK + MB_ICONINFORMATION);
    end;{ TSec }procedure TSec.Execute;
    var
      i: Integer;
    begin
      FreeOnTerminate := True;
      OnTerminate := Form1.ThreadOnTerminate;
      for i := 0 to 2000 do
        Form1.Caption := IntToStr(i);
    end;
    ...
      

  3.   

    那你就动态设置其它线程的OnTerminate := Form1.ThreadOnTerminate;试一下
      

  4.   

    转贴:等待线程结束如果要等待一个线程结束,可以这样做:
    在线程得私有变量中申明:
    FEvent:TSimpleEvent;
    published部分:
    property Event:TSimpleEvent read FEvent;Create中:
    FEvent:=TSimpleEvent.Create;Destroy中:
    FEvent.Free;在Execute中的第一行:
    FEvent.ResetEvent;
    在线程得结束(一般是最后一行代码)后添加:
    FEvent.SetEvent;然后在另外需要等待线程结束的地方把原来的
    WaitForSingleObject(AThread.Handle,????)改成WaitForSingleObject(AThread.Event.Handle)即可。