困扰很久了,程序偶尔不能关闭,怎么解决(100)

L

Lessy

Unregistered / Unconfirmed
GUEST, unregistred user!
大约有50%的机会不能关闭程序,关闭后程序就停留在任务栏,只能结束才能关begin Application.Initialize; // 程序 // application.run;end.//此处设置断点程序跑到断点处后,按F9就没反应了(此时状态:运行按钮绿色,能按,但没反应,断点处仍然有绿色箭头指着,用鼠标放到任何一个变量上都显示:变量名=26)关闭程序前已经关闭所有dll窗口,释放所有dll(只释放动态的,静态的没有),关闭所有窗口,断开了数据库连接,DataModal也Free掉了,甚至free掉主窗口的所有控件,但结果依旧
 
是否用到socket?
 
007vivi对,三层架构,用socketconnection,关闭主程序时已经关闭socket连接了
 
而且我在scktsrvr中查看已经没有连接了
 
试过了很多次,发现如果插件窗口打开很多的话(大约20个),关闭时不响应的几率很高,打开几个插件窗口时,基本可以关闭,我在释放插件时,调用dll里面的函数把所有打开的插件窗口都关掉了当关闭不响应时,我打开插件目录,所有插件都能被删除,说明已经释放了
 
这种事情只能是慢慢跟踪,把所有的插件和你的主程序加入到一个工程组中,然后统一调试,如你的程序停留在end上,那么就看看单元中的finalization部分是不是有问题。
 
想粗暴点呢就用TerminateProcess
 
放飞:把所有的插件和你的主程序加入到一个工程组中 这个工作量巨大,估计是不可能了finalization 部分只在插件中才有用到,如下unit globl;interface uses forms;var oldapplication:TApplication;implementation initialization oldapplication:=Application; finalization Application:= oldapplication;end.
 
to cyf_00002 不瞒你说,我已经写了一个外部程序,如果关闭主程序后5秒后还是没不响应,外部程序就结束掉主程序的进程。这个方法什么时候都能关掉程序,但就是觉得不怎么好,想问问:结束进程后,内存方面会不会自动清理干净的?
 
进程结束后,不用考虑内存,从2K开始,已经回收的很干净了
 
to cyf_00002 程序能不能自己结束自身进程呢?我用外部程序可以结束,程序内调用的话会报错
 
在程序关闭时,获取自身的进程PID,TerminateProcess 掉就好了,而且速度很快
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
回复
0
查看
1K
天地弦
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部