我有一个程序在关机期间遇到了一些问题,引发了我无法追溯到其来源的异常。它似乎与时间相关且不确定。这是在所有共享资源被释放之后发生的,并且由于它已关闭,内存泄漏不是问题,所以这让我想知道是否有任何方法可以告诉程序在释放共享资源后立即静默终止,而不是继续关闭序列并给出异常消息框。
有谁知道这是怎么做到的吗?
在查看了 Delphi 运行时库源代码和 Microsoft 文档之后;我可以证实 Mason 和 Paul-Jan 的评论。
关机的层次结构如下
Application.Terminate()
performs some unidentified housekeeping of application
calls Halt()
Halt()
calls ExitProc if set
alerts the user in case of runtime error
get rid of PackageLoad call contexts that might be pending
finalize all units
clear all exception handlers
call ExitprocessProc if set
and finally, call ExitProcess() from 'kernel32.dll'
ExitProcess()
unloads all DLLs
uses TerminateProcess() to kill the process
退出进程(0)?
Halt(0) 曾经是告诉程序立即结束的好方法。现在可能有一种对 Delphi 更友好的方法,但我 95% 确定 halt(0) 仍然有效。:-)
如果 HeartWare 建议使用 ExitProcess() 失败,则可能是您使用了一些对 DLL_PROCESS_DETACH 响应不佳的 DLL。在这种情况下,请尝试使用 TerminateProcess(getCurrentProcess, 0);
一旦你采取了这样的措施,人们可能会怀疑主题标题的“干净”部分是否仍然经得起推敲。
上次我不得不寻找这样的问题时,关闭是导致事件(调整大小?已经有一段时间了。)在垂死的窗口上触发,导致试图重绘需要已经处理的东西的东西。