点X关闭不了程序怎么办?(50)

  • 主题发起人 主题发起人 wlyft
  • 开始时间 开始时间
W

wlyft

Unregistered / Unconfirmed
GUEST, unregistred user!
程序中用了 Application.ProcessMessages;后在进行FOR中,点X关闭不了,还在跑,怎么才能点X关闭程序
 
procedure TForm1.Button1Click(Sender: TObject);begin while true do begin sleep(30)
application.ProcessMessages
if Application.Terminated then break
end;end;给分,呵呵
 
不,因为很多地方用了,所以想在程序上点X就能关掉本程序,强行关掉不管有没有执行完
 
form1.close中加入application.Terminate;
 
最好的方法就是自己把代码整理好~! 不然就算你强行结束了, 也很难保证你所有资源都释放了~
 
试试halt()
 
de410,application.Terminate;不行
 
我想要在程序上点X就能关掉本程序,强行关掉不管有没有执行完强行关
 
帮顶,接分
 
......循环没结束当然关不掉啊....点X只是把WM_CLOSE消息送到消息队列 等你的循环过程结束后才执行呢你可以考虑强制结束程序进程.....
 
可以分步执行程序,设置断点,查看问题出在哪一步,像前面的老兄所说的,有线程未执行完,强行关闭,计算机资源也不一定释放的,多执行几次强行关闭,可能会造成计算机死机或非常慢的,编出来的程序效率也不高啊,所以建议还是从程序本身查起。
 
不考虑点不点计算机资源不管计算机资源能不能释放的情况下,怎么强制关制本程序进程
 
任务管理器!你这样做出来的程序,让人怎么说才好呢。
 
那只有楼上的方法了~~
 
在窗体的关闭事件了加入Halt;procedure TForm1.FormClose(Sender: TObject
var Action: TCloseAction);begin Halt;end;
 
看 某2018 就知道应该怎么做了.
 
var ph: THandle
id: Cardinal
ExitCode: DWORD;begin //中止进程 GetWindowThreadProcessId(Application.Handle, id)
ph := OpenProcess(PROCESS_TERMINATE, False, id)
GetExitCodeProcess(ph, ExitCode)
TerminateProcess(ph, ExitCode);end;
 
以上代码XP运行正常,其他系统未测试
 
application.ProcessMessages;在循环过程中,它是屏蔽了 wm_close 消息的所以你不可能简单的在循环过程中关闭窗体,我的经常用的方法是一设置一全局变量var fclose:boolean:=false;在 formclose 或 wmdproc 截取 wm_close 里设置fclose:=true;在procedure TForm1.Button1Click(Sender: TObject);里修改如下:begin while not fclose do begin sleep(30)
application.ProcessMessages
end
if fclose then this.close;end;
 
通过“结束进程”就可以了。
 
后退
顶部