I would like to terminate a Delphi application without executing any other code line and I'm wondering about which is the proper way to do this. Furthermore, I would like to know if there's something wrong in what I'm actually doing at the moment. Basically, my code looks like this:
//Freeing all objects (Obj1.Free, etc..)
Application.Terminate;
Halt;
Is this the right way to stop a Delphi application or should it be done in another way?
Application.Terminate()
breaks the message loops in TApplication.Run()
and TForm.ShowModal()
, allowing the main thread to exit normally, perform necessary cleanups, etc.
Vcl.Forms.TApplication.Terminate
Ends application execution.
Call
Terminate
to end the application programmatically. By callingTerminate
rather than freeing the application object, you allow the application to shut down in an orderly fashion.
Terminate
calls the Windows APIPostQuitMessage
function to perform an orderly shutdown of the application.Terminate
is not immediate.Terminate
is called automatically on a WM_QUIT message and when the main form closes.
Halt()
, on the other hand, is an immediate abnormal termination. Basically, ripping the process out of memory. Use it only in extreme situations where no other option is available.
Initiates the abnormal termination of a program.
Halt performs an abnormal termination of a program and returns to the operating system.
To perform a normal termination of a Delphi application, call the
Terminate
method on the globalApplication
object. If the application does not use a unit that provides anApplication
object, call theExit
procedure from the main Program block.