关于线程的释放(100分)

  • 主题发起人 主题发起人 MicroZeng
  • 开始时间 开始时间
M

MicroZeng

Unregistered / Unconfirmed
GUEST, unregistred user!
线程的创建方法:
with TMyThread.Create(FileName, StringList)do
OnTerminate := nil;
声明部分:
protected
procedure Execute;
override;
public
constructor Create(FileName : String;
StringList: TStringList);
destructor Destroy;
override;
end;

我是让它在执行完成后释放的.可是如果我要强制释放,如何做?
 
TMyThread.suspend;
TMyThread.Free;
 
你需要在Execute方法里面自己判断是否Suspend,然后决定是否结束
 
1.如果我建立了多个线程,使用{TMyThread.suspend;
TMyThread.Free;}能够全部释放调吗?
2.如果我在不小心执行了死循环操作, 能释放掉吗?
3.我能不能在(强制)释放线程的那一瞬间执行一些别的操作吗?
 
1. 一般情况下可以.
2. 理论上完全可以.
3. 不明白您的要求.
 
3.好象不行
 
to Another_eYes :
我的意思是类似在TForm.CloseQuery的过程.
 
如果象 Delphi4 自带的那个Demo : /Demos/threadDemo.dpr 那样的进程怎么释放?
请详细说明.
 
什么是强制释放? 你如果要中断线程,在execute中检查terminated属性。要在退
出线程前做一些事,可以threaddone中完成。同一类线程的多个实例我想你是要逐个
释放的。在你可能会死循环的循环体中检查terminated.
 
我建议是你好好看看帮助,里面讲得
很好,在看一点有关线程的东东就可以
很简单地解决你的问题。
 
1。请定义变量为TMyThread类型,然后创建线程的实例赋值给变量,
例如:
var
MyThread:TMyThread;
MyThread:=TMyThread.Create(FileName,StringList);
2.在线程的Execute过程中应能及时结束线程的执行。可用Terminated 来控制。
3.若你是想在主线程中释放线程则直接运行MyThread.Free;
4.若在线程中退出可运行:
Self.Suspend;
或Self.Terminated:=True;
或 Self.Terminate;
5.若线程对某个类的实例进行了操作,则应该先将该实例Free掉在将线程结束,否则
可能会死机或线程死了(无法终止)。

 
大家注意了,TThread的Suspend方法是有bug的,在清华BBS上面有
说明。
此外要应付强制杀thread是一般地说不太保险的你最好在execute中间
不时访问主窗口的同步信号或者是定义好的用来通知thread结束的Boolean
类型变量,在发现要退出时推出Execute方法。
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
740
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
644
import
I
后退
顶部