关于删线程(100分)

  • 主题发起人 主题发起人 风清云淡
  • 开始时间 开始时间

风清云淡

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序用了多个线程,但当线程正在执行时,我不小心关闭了程序,他就
提示软件异常,在98下会不断的死机。
我的线程是要登陆到远程数据库的
我现在想要的效果是在退出时,把线程终止并释放资源和远程数据库断开连接。
 
设个标志吧, 在线程中检测.
 
overriding 线程的Create方法。
在Create中写上
FreeOnTerminate := True;用上这句也放有效,没有具体测试,以前好象用过,很久了。
inherited;
 
如果你用begin
thread 或Createthread 开Thread的话,建议在
开一个监视Thread ,用以捕捉退出信息,再
begin
Free All resource ,
TerminateThread掉连接Thread
end;
如果你用Tthread 对象,可以在OnTerminate事件中写Free resource 代码.
 
类似的问题我回答好几次了。
提供参考:
问题:如何在线程退出的时候释放在线程里创建的临时资源?
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=802640
问题:怎样强制性终止正在运行的线程?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=750068
问题:如何暂停/恢复/停止多线程?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=812009
总有点帮助吧。
 
哈哈,用我的这个代码把:
在关闭的事件中加上:
把所有的线程都加上:
yourthread.Terminate;
youthread.waitfor;
yourthread.free;
....free;//其他自己定义的资源释放。
不要只用terminate,因为这样只是把线程的onterminatefree标志为true。
但是程序不会马上开始终止。造成错误很正常的。
waitfor的功能就是等着程序把手头上所有的事做完。然后在自己加上free,就ok了。
如果还有问题的话,就是你还有其他的资源没free掉。
 
??? 3月7号答的问题怎么又浮上来了。上面各位答的比较详细了
 
多人接受答案了。
 
后退
顶部