简单说说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中关于资源释放(Free,Relealse,FreeAndNil)
根据日常编程经验,得出一些Delphi中关于资源释放的体会. 假如有对象Obj为TObject类型: 1) Obj.Free直接释放资源后,调用OnDestroy事件,但是没有将Obj指针值置为Nil ...
- Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……
接着上文介绍TThread. 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与De ...
- Delphi中线程类TThread实现多线程编程1---构造、析构……
参考:http://www.cnblogs.com/rogee/archive/2010/09/20/1832053.html Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大 ...
- 转发 Delphi中线程类TThread 实现多线程编程
Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...
- Delphi 中的自动释放策略-转
八.使用结构体而不是结构体指针: 很重要 一.指定 Owner 后, 随 Owner 连带释放: //uses Vcl.StdCtrls, Vcl.ExtCtrls; var panel: TPane ...
- delphi中线程应用之Synchronize
当一个线程在使用时,如果这个函数使用了Synchronize修钸的话就不允许别一个线程来调用这个函数,它的目的是避免多个子线程同时访问主线程资源.示例:procedure TTaskThread.Sh ...
- Delphi 中的自动释放策略
来自万一老师的博客:http://www.cnblogs.com/del/archive/2011/12/21/2295794.html ------------------------------- ...
- DELPHI中完成端口(IOCP)的简单分析(4)
DELPHI中完成端口(IOCP)的简单分析(4) 在我以前写的文章中,一直说的是如何接收数据.但是对于如何发送数据却一点也没有提到.因为从代码量上来说接收的代码要比发送多很多.今天我就来写一下如 ...
- Delphi中的线程类 - TThread详解
Delphi中的线程类 - TThread详解 2011年06月27日 星期一 20:28 Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本 ...
随机推荐
- Deepin下python安装uwsgi报错: Python.h:没有那个文件或目录
解决方法是安装python-dev,这是Python的头文件和静态库包 正在读取软件包列表... 完成正在分析软件包的依赖关系树 正在读取状态信息... 完成 下列软件包是自动 ...
- 【p081】ISBN号码
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定 ...
- 浅谈python字符串存储形式
http://blog.csdn.net/zhonghuan1992 钟桓 2014年8月31日 浅谈python字符串存储形式 记录一下自己今的天发现疑问而且给出自己现有知识有的回答. 长话短说,用 ...
- Quartz2D常见图形的绘制:线条、多边形、圆
UI高级 Quartz2D http://ios.itcast.cn iOS学院 掌握 drawRect:方法的使用 常见图形的绘制:线条.多边形.圆 绘图状态的设置:文字颜色.线宽等 图形上下文状 ...
- 【Python 安装】安装第三方库时 PermissionError: [WinError 5] Access is denied
对于 windows 用户,在开始菜单中输入 cmd,右键以 run as administrator(以管理员身份运行). Python - PIP install trouble shooting ...
- DirectX11学习笔记
一.假定每种颜色的原始点是不同,表面的这样的原始颜色将被指定为每种颜色用线性内插值传授,这个被称为高洛德着色(Gouraud Shading).也称为平滑阴影: 二.三维图元:Direct3D中.使用 ...
- Power control within a coherent multi-processing system
Within a multi-processing system including a plurality of processor cores 4, 6operating in accordanc ...
- dom4j解析xml获取所有的子节点并放入map中
dom4j递归解析所有子节点 //解析返回的xml字符串,生成document对象 Document document = DocumentHelper.parseText(resultXml); / ...
- idhttp post 出现exception class EIdSocketError with message 'Socket Error # 10054的解决办法(捕捉异常,防止程序挂掉)
由于项目需要.需要向一个地址提交数据.提交的次数很频繁,但是程序经常raised exception class EIdSocketError with message 'Socket Error # ...
- Cordova 返回键切换后台
这里需要用到 cordova-plugin-backbutton 这个插件 1.安装插件,命令窗口输入(当前目录是你项目所在的目录) cordova plugin add cordova-plugin ...