线程的释放方式有两种:一种是线程在运行完成后自动释放,一种是手动释放。无论哪种都应在线程执行完释放,即线程停止后释放。要说明的是停止不是释放。
线程的停止要也有两种方式:一种是运行完自动停止,一种是因为execute方法中做了循环,需要设置标志位来停止。
1. 自动停止自动释放
这种情况时,execute方法中没有循环,执行完即停止,停止后就自动释放。
在execute开始时加入FreeOnTerminate := True;即可
2. 手动停止手动释放
首先说明,使用此种方法时不可以使用FreeOnTerminate := True;
处理方法如下,释放前必须调用WaitFor方法等待线程执行完后,否则Free的时候可能因为线程还未执行完报错。代码可参考http://evelee.net/blog/?id=24
MyThread.Terminate; MyThread.WaitFor; MyThread.Free;