本人初使用delphi ,不知如何来控制  terminated 属性,
我用 
procedure TThread.Terminate;
begin
  FTerminated := True;
end;
可是老是出错,请各位写一个最简单的能改变terminated 属性方法,我在这里先向您说声谢谢了.

解决方案 »

  1.   

    在线程的执行体中
    procedure AThread.Execute;
    begin
    //线程停止时释放内存
     FreeOnTerminate := True;
    while true do
    begin
    //如果Terminated=true退出
     if  Terminated then exit;
    sleep(100);
    end;
    end;AThread.Terminated:=true;就可以停止释放一个线程
      

  2.   

    看看下面的:
    -------------------------
    (I)线程的中止
        看了几本书,提到线程的中止主要有三种途径:线程所属进程中止;线程内部调用EndThread函数;线程外部调用TerminateThread函数。
       1. 线程所属进程中止这一条似乎可有可无?(问题一)事实上每次应用程序关闭之前都还要检查是否还有未结束的线程,如果还有线程没结束比如正在进行数据库等操作,则关闭应用程序可能会出问题:( 对于这个问题,一直搞不清楚,有没有必要在应用程序结束前检查并结束所有线程?(问题二)
        2.EndThread函数 当线程函数Excute()执行完毕,它会调用Delphi的标准例程EndThread,这个例程再调用A P I函数E x i t T h r e a d ( )。由ExitThread() 来清除线程所占用的栈。按照这种说法,我们在线程函数中直接调用EndThread(0)应该可以直接结束线程执行,并且释放了线程所占用的资源?(问题三:是这样的吧,我还没来得及试)这样就可以结合线程的Terminated属性,有如下代码了:
    在线程函数中频繁检查Terminated属性
    if(self.Terminated or Application.Terminated) EndThread(0)
        3.TerminateThread函数是Win32API函数,其声明如下:function Te r m i n a t e T h r e a d ( h T h r e a d : T H a n d l e ; d w E x i t C o d e : D W O R D ) ;  T T h r e a d的H a n d l e属性可以作为第一个参数,因此,Te r m i n a t e T h r e a d ( )常这样调用:
    Te r m i n a t e T h r e a d ( M y H o s e d T h r e a d . H a n d l e , 0 )如果选择使用这个函数,应该考虑到它的负面影响。首先,此函数在Windows NT与在Windows 95/98下并不相同。在Windows 95/98 下,这个函数能够自动清除线程所占用的栈;而在Windows NT下,在进程被终止前栈仍然保留。其次,无论线程代码中是否有t r y. . . f i n a l l y块,这个函数都会使线程立即停止执行。这意味着,被线程打开的文件没有被关闭、由线程申请的内存没有被释放等情况。而且,这个函数在终止线程的时候也不通知D L L,当D L L关闭时,这也容易出现问题(摘自Steve Teixeira和Xavier Pacheco的Delphi5开发人员指南,问题四:不知道这种情况对于win2000是否适用?)
        4.关于waitfor方法 等待线程结束可以调用它的WaitFor方法。不过有些不解之处。比如Delphi5开发人员指南中有这样一段代码:
    for i:=ThreadList.count-1 downto 0 do begin
      TDrawThread(ThreadList[i]).Terminate;
      TDrawThread(ThreadList[i]).waitfor;
      //(问题五:如果线程设置了FreeOnTerminate:=true,则调用Terminate之后,有没有可能线程马上被终止且释放了资源,此时若调用waitfor会不会出问题?)
    end;  综上,如果结束一个线程比较稳妥的方式是这样:首先,在线程函数中频繁检查Terminated属性,发现为True时,调用EndThread(0)方法结束线程;在需要的时候调用线程的Terminate方法将线程的Terminated属性设置为true即可达到结束线程的问题;为了确保线程已经终止,使用waitfor方法进行确认。
      

  3.   

    http://search.csdn.net/Expert/topic/2410/2410817.xml?temp=.6919672
      

  4.   

    terminate是用来读取线程的状态的,一般不直接设置其值。
    调用 athread.terminate方法会将此属性置为真。
      

  5.   

    Kshape(伟大的大伟//[!!!!]) 
    的很好。
    学习