简单说说Delphi中线程的释放
Posted 朝闻道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单说说Delphi中线程的释放相关的知识,希望对你有一定的参考价值。
线程的释放方式有两种:一种是线程在运行完成后自动释放,一种是手动释放。
无论是那种释放,都应该在线程停止后进行释放。
然而线程的停止也有两种情况:一种是不需要设置标志位,直接完成;一种是由于execute方法中做了循环,需要设置标志位才能停止。
如果线程已经停止并且自动释放,再去手动停止,就会报错。
下面看代码:
1、自动停止后自动释放的线程:
- constructor TTestThread.Create;
- begin
- inherited Create( True );
- FreeOnTerminate := True;
- end;
- procedure TTestThread.Execute;
- begin
- ....//功能代码
- //此方法完成后线程就已经停止了
- end;
这种情况线程会自动释放,因此不要手动释放,否则会报错
2、手动停止后自动释放的线程:
- constructor TTestThread.Create;
- begin
- inherited Create( True );
- FreeOnTerminate := True;
- end;
- procedure TTestThread.Execute;
- begin
- while not Terminated do //not Terminated do
- begin
- ....//功能代码
- end;
- end;
- procedure Test
- begin
- t1 := TTestThread.Create( Self );
- t1.Terminate;
- end;
3、手动释放的线程:
- constructor TTestThread.Create;
- begin
- inherited Create( True );
- end;
- procedure TTestThread.Execute;
- begin
- while not Terminated do //not Terminated do
- begin
- ....//功能代码
- end;
- end;
- procedure Test
- begin
- t1 := TTestThread.Create( Self );
- t1.Terminate;
- t1.WaitFor;
- t1.Free;
- end;
那么,何时使用自动释放的线程,何时使用手动释放的线程呢
我的建议是:
如果这个线程运行时间很短或者能保证在系统退出前完成运行,则可以选择自动释放,因为它可以很快自动释放掉
如果这个线程运行贯穿系统运行整个期间,则要选择手动释放了
http://blog.csdn.net/youthon/article/details/6721692
以上是关于简单说说Delphi中线程的释放的主要内容,如果未能解决你的问题,请参考以下文章
DELPHI 用TThread如何判断线程是不是存在 并且释放线程