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 Testbegin    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 Testbegin    t1 := TTestThread.Create( Self );    t1.Terminate;    t1.WaitFor;    t1.Free;end;

那么,何时使用自动释放的线程,何时使用手动释放的线程呢

我的建议是:

如果这个线程运行时间很短或者能保证在系统退出前完成运行,则可以选择自动释放,因为它可以很快自动释放掉

如果这个线程运行贯穿系统运行整个期间,则要选择手动释放了

pc100_net的博客

http://blog.ifeng.com/article/35055412.html

时间: 2024-08-05 11:09:51

Delphi中线程的释放介绍[转]的相关文章

简单说说Delphi中线程的释放

线程的释放方式有两种:一种是线程在运行完成后自动释放,一种是手动释放. 无论是那种释放,都应该在线程停止后进行释放. 然而线程的停止也有两种情况:一种是不需要设置标志位,直接完成:一种是由于execute方法中做了循环,需要设置标志位才能停止. 如果线程已经停止并且自动释放,再去手动停止,就会报错. 下面看代码: 1.自动停止后自动释放的线程: [delphi] view plain copy constructor TTestThread.Create; begin inherited Cre

Delphi 中的自动释放策略

http://www.cnblogs.com/del/archive/2011/12/21/2295794.html Delphi 中的自动释放策略 一.指定 Owner 后, 随 Owner 连带释放: //uses Vcl.StdCtrls, Vcl.ExtCtrls; var   panel: TPanel; procedure TForm1.Button1Click(Sender: TObject); begin   panel := TPanel.Create(Self);   pan

Delphi中线程类TThread 实现多线程编程

作者:Rogee出处:Http://Rogee.cnblogs.com/心得:BLOG是什么,它是一个记录学习过程的东西 Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchronize的用法就完了.然而这并不是多线程编程的全部,我写此文的目的在于对此作一个补充. 线程本质上是进程中一段并发运行的代码.一个进程至少有一个线程,即所谓的主线程.同时还可以

Delphi中线程类TThread实现多线程编程(线程同步技术、Synchronize、WaitFor……)

接着上文介绍TThread. 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event)与Delphi中的事件有所不同.从本质上讲,Event其实就相当于一个全局的布尔变量.它有两个赋值操作:Set和ReSet,相当于把它设置为 True或False.而检查它的值是通过WaitFor操作进行.对应在Windows平台上,是三个API函数:SetEvent.ResetEvent.WaitForSignalObje

Delphi 中的自动释放策略-转

八.使用结构体而不是结构体指针: 很重要 一.指定 Owner 后, 随 Owner 连带释放: //uses Vcl.StdCtrls, Vcl.ExtCtrls; var panel: TPanel; procedure TForm1.Button1Click(Sender: TObject); begin panel := TPanel.Create(Self); panel.Parent := Self; with TButton.Create(panel) do //AOwner =

关于Java中线程池的解读

之前的面试中多次被问到线程池的相关内容,所以在之后的时间内我仔细的学习了一下线程池的相关内容. 1.使用线程池的意义 复用:类似WEB服务器等系统,长期来看内部需要使用大量的线程处理请求,而单次请求响应时间通常比较短,此时Java基于操作系统的本地调用方式大量的创建和销毁线程本身会成为系统的一个性能瓶颈和资源浪费.若使用线程池技术可以实现工作线程的复用,即一个工作线程创建和销毁的生命周期期间内可以执行处理多个任务,从而总体上降低线程创建和销毁的频率和时间,提升了系统性能. 流控:服务器资源有限,

多线程的基本概念和Delphi线程对象Tthread介绍

多线程的基本概念和Delphi线程对象Tthread介绍 作者:xiaoru WIN 98/NT/2000/XP是个多任务操作系统,也就是:一个进程可以划分为多个线程,每个线程轮流占用CPU运行时间和资源,或者说,把CPU 时间划成片,每个片分给不同的线程,这样,每个线程轮流的“挂起”和“唤醒”,由于时间片很小,给人的感觉是同时运行的. 多线程带来如下好处: 1)避免瓶颈: 2)并行操作: 3)提高效率:多线程的两个概念: 1) 进程:也称任务,程序载入内存,并分配资源,称为“一个进程”. 注意

在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)

在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程! 如果直接使用Win32的API函数CreateThread()创建多个线程,也是可以创建的.但是,你应该明白,在每个线程中动态分配和销毁内存块,是需要同步保护的.Delphi语言中有一个在使用多线程环境下至关重要的全局变量IsMultiThread,系统在进行内存分配的时候,根据IsMultiThread变量值判断当前是否使用在多线程环境下,如果该变量为True,哪么,系统在分配和销毁内存的

delphi 中TStringList Clear 方法的时候该对象有没有被释放

delphi 中TStringList 通过function AddObject(const S: string; AObject: TObject): Integer; 方法添加了一个对象,请问我在调用Clear 方法的时候该对象有没有被释放 object里存的只是指向对象的指针,clear只是把指针清除了,对象并没有被释放.TObjectList可以自动释放对象,剩下的TList,StringList等List类型的都需要手动释放.