procedure TThread1.Execute;
begin
        OnTerminate := MainForm.ThreadsDone ;
end;procedure TMainForm.ThreadsDone(Sender: TObject);
begin
        Timer1.Enabled := True;
end;
然后我在程序中起用这个线程
        TThread1.Create(False);
        //DoSomething;
        ????//任务完成,终止线程,但是怎么样终止这个线程啊?

解决方案 »

  1.   

    你的线程太怪异了,是用来做什么的,我觉得你的线程有问题,假设真的使用线程终止,给你个例子:
    var thread1: TThread1;
     thread1 := tthread1.Create(False);
     thread1.terminate;
      

  2.   

    你的线程为了干什么?
    procedure TThread1.Execute;
    begin
            OnTerminate := MainForm.ThreadsDone ;
    end;
    //执行到这里已经终止了,但是没有吧freeonterminated设成true.多一线程对线程对象不会自动被释放。一般在execute里面都是循环!
    procedure TThread1.Execute;
    begin
       while not self.terminated do//thread.terminate只能把terminated属性变成true,要配合检测terminated才行。不能强行终止线程!
       begin
          //something;
       end;
            //OnTerminate := MainForm.ThreadsDone ;
    end;
      

  3.   

    procedure TThread1.Execute;
    begin
            freeOnTerminate:=True;  //自动释放线程资源
            OnTerminate := MainForm.ThreadsDone ;
    end;
      

  4.   

    TThread1.Create(False);
            //DoSomething;这里是一边执行一个需要几分钟的存储过程,一边执行一个进度条,免得让用户还以为死机了.执行完了这个存储过程,我不想让我那个进度条在显示进度,所以就想终止线程。不然的话那个进度条老是不停止。
          刚学线程。