在Delphi下终止应用程序时,线程未终止

时间:2013-04-22 08:25:53

标签: windows multithreading delphi

假设我有一个在应用程序终止时仍在运行的线程

(此线程无法终止,因为它等待Windows api调用返回 这可能很长......)

如果应用程序关闭,线程会发生什么?

可以引发异常吗(我在Delphi下)?

1 个答案:

答案 0 :(得分:7)

我会说异常是非常合理的。当您致电Application.Terminate时,这将导致以下事件序列:

  1. 致电PostQuitMessage
  2. Application.Terminated设置为True
  3. Application.Run返回。
  4. System.Halt被召唤。
  5. 运行退出程序,特别是DoneApplication,它将拆除Application及其拥有的所有组件。嗯,更好的希望你的线程不能访问Application拥有的任何东西。
  6. FinalizeUnits被调用。嗯,哦。内存管理器已关闭,旁边还有很多。
  7. ExitProcess被调用。现在你的线程被杀了。
  8. 在调用ExitProcess之前,您的主题将继续运行。如果它执行任何会受到DoneApplicationFinalizeUnits调用影响的代码,那么您应该会遇到问题。