请教:多线程资源释放问题 (50分)

  • 主题发起人 ideafrog
  • 开始时间
I

ideafrog

Unregistered / Unconfirmed
GUEST, unregistred user!
很认真的请教,也想各位对自己的回答作过认真证实,谢谢!!!
多线程中,在execute中动态创建query,database,session控件
问题一: 线程它会自己释放这些资源吗?如果在线程结束代码中不显式的释放,会不会
泄漏内存?
问题二: 我是释放的,释放代码如下: 但是系统运行长时间后,出现异常!
try
if Assigned(FQuery) then
begin
FQuery.free;
FQuery :=nil;
end;
if Assigned(FAutoDb) then
begin
FAutoDb.Free;
//出异常,程序死调
FAutoDb := nil;
end;
except
end;
try
FSession.Free;
//如果把释放database的注释调,这里就出异常
FSession := nil;
except
end;
保护没起作用,怎么会这样的。
很想听听各位大侠的意见!
 
1、自己创建的自己Free,线程是不会自动帮你的, 你可以在线程结束的时候Free你创建的东西。
2、你这代码写在哪里? 你应该写在线程的Destroy里。
 
<<//如果把释放database的注释调,这里就出异常
FSession.closedatabase(FAutoDb)
FSession.close
 
应该在线程关闭以前释放你动态创建的资源。
 
线程不是有FreeOnTerminate属性吗,把这个设置为True,就会自动在线程结束后释放内存的。
 
同意xianjun
 
把DataBase的keepConnection设为False试试看
记得把Query关闭
 
我也曾经有过类似的痛苦,释放代码应该在县城的Destroy里面,你必须按照顺序释放资源,比如
先释放query再释放database等等
 
ideafrog:
你还在搞这个问题啦
解决不了了阿
爽了吧?
老问题啊,烦啊这个东西
 
to tophi
这下你爽了吧,全部给你了
 
顶部