我的delphi App存在一个主要问题。我正在开发一种使用外部安全性的软件。我正在使用必须连接到用户计算机的USB设备才能运行我的软件。如果用户有任何机会删除此加密狗,或者在没有加密狗的情况下启动,应用程序应该警告用户并立即停止。 在创建应用程序时会释放一个线程,该应用程序会检查安全设备。但是,当检查失败时,例如,没有找到设备,该线程没有杀死我的应用程序。我正在使用这样的东西:
retCode := checkSecurity();
if retCode = -1 then
begin
ShowMessage('Security device not found! Terminating immediately!');
Application.Terminate;
end;
这里的主要问题是Application.Terminate
并没有真正杀死应用程序。我已经读过SO和其他地方,Terminate发送一个优雅关闭的信号,并等待其他线程,在我的情况下,应用程序的主线程,完成。我真的需要按照提到的方式杀死应用程序,杀死所有线程并退出,如果可能的话,清理以避免内存泄漏,但如果不是,请跟我好。我正在使用Delphi XE2,使用Windows 8.1进行开发。
有什么想法吗?
答案 0 :(得分:3)
您可以致电ExitProcess
强制立即终止。与Halt
相比,操作系统功能ExitProcess
执行的清理工作更少。
答案 1 :(得分:2)
要杀死某个应用,只需拨打Halt即可。它是DOS时代的遗留物,适合与现代Delphi应用程序很好地协作。它将呼吁所有的最终确定'所有单位都有块,但不多。
答案 2 :(得分:2)
要从您可以使用的线程终止应用程序:
TThread.Queue(nil,
procedure
begin
Application.Terminate;
end
);
这是跨平台的,并且“几乎”与
相同PostThreadMessage(MainThreadID, WM_QUIT, 0, 0)
鉴于Application对象尚未销毁,您使用的是Windows。