在这里把网友常常搞不清楚的属性作用列出来:
一、FreeOnTerminate
用于表明线程执行完毕后是自动释放还是保留,默认为False
二、Terminate
该过程只是简单地设置线程类的Terminated标志,并不是真正的释放,这一点要格外注意!
三、Synchronize
该函数是同步方法,如果线程中有操作UI的语句时,需要把UI操作写成过程(无参数过程),放到该方法中!

//这段代码是要用线程打印1-99,输出至Memo1中 TThread1 = class(TThread) private FNum: Integer; procedure AddLines; protected procedure Execute; override; end; procedure TThread1.LinesAdd(); begin Form1.mmo1.Lines.add(IntToStr(FNum));//把操作UI类写成一个过程,注意,该过程不能有参数,不过可以把参数写成线程类的成员变量 end; procedure TThread1.Execute; var i: Integer; begin FreeOnTerminate := True; for i := 0 to 99 do begin if Terminated then break; FNum:= i; Synchronize(AddLines);//不能有参数 end; end;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步