哪种终止delphi应用程序的正确方法?

Hwa*_*wau 19 delphi halt terminate

我想终止一个Delphi应用程序而不执行任何其他代码行,我想知道哪个是正确的方法来执行此操作.此外,我想知道我现在正在做的事情是否有问题.基本上,我的代码看起来像这样:

//Freeing all objects (Obj1.Free, etc..)
Application.Terminate;
Halt;
Run Code Online (Sandbox Code Playgroud)

这是停止Delphi应用程序的正确方法还是以其他方式完成?

Rem*_*eau 31

Application.Terminate()打破该消息中循环TApplication.Run()TForm.ShowModal(),从而允许主线程正常退出,执行必要的清理等

Vcl.Forms.TApplication.Terminate

结束应用程序执行.

调用Terminate以编程方式结束应用程序.通过调用Terminate而不是释放应用程序对象,您可以允许应用程序以有序的方式关闭.

Terminate调用Windows API PostQuitMessage函数以执行应用程序的有序关闭.Terminate不是立即的. Terminate在WM_QUIT消息上自动调用,并在主窗体关闭时调用.

Halt()另一方面,是立即异常终止.基本上,将进程从内存中删除.仅在没有其他选项的极端情况下使用它.

System.Halt

启动程序的异常终止.

暂停执行程序的异常终止并返回操作系统.

要执行Delphi应用程序的正常终止,请Terminate在全局Application对象上调用该方法.如果应用程序不使用提供Application对象的单元,请Exit从主程序块调用该过程.

  • `Halt` 不会释放太多,但它确实会尝试进行一些内部系统清理。如果您的目标是立即退出进程,您可以使用 `Halt()`,但如果仍然有太多代码需要执行,那么您将不得不求助于 Win32 API 的 `TerminateProcess()` 函数。 (2认同)

Dav*_*nan 8

我想在不执行任何其他代码的情况下终止Delphi应用程序.

Application.Terminate不会也Halt不会实现这一目标.前者执行有序终止.很多代码都会执行.打电话Halt更有希望.这是异常终止.但是执行单元定型代码.

如果您希望尽快退出,请沿途执行最少量的代码,请致电ExitProcess.这是最后一步,Halt通过ExitProcess直接调用,您可以避免Halt在调用之前执行的所有步骤ExitProcess.

  • ExitProcess将执行代码.比如DllMain.应该使用TerminateProcess. (3认同)
  • @Alex TerminateProcess 确实更加残酷。 (2认同)