问题1:
一般来说,要让你的线程能够尽快终止,必须在Execute方法中在较短的时间内不断地检查Terminated标志,以便能及时地退出。这是设计线程代码的一个很重要的原则!
在这种情况下使用上述思路一般不会出什么问题!
type TThread1 = class(TThread) private procedure Test(); protected procedure Execute; override; end; procedure TThread1.Execute; var i:Integer; begin FreeOnTerminate := True;//线程正常结束后自动释放线程资源 For i:=0 to 1000 do begin if Terminated then break;//线程非正常结束时,遇到标识马上退出! Test()//线程内的业务处理函数 end; end; procedure TForm1.FormDestroy(Sender: TObject); begin if Assigned(t1) then t1.Terminate;//在窗体关闭时做关闭标识 end;