2

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

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

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

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

4

1 回答 1

7

我会说一个例外是非常合理的。当您调用Application.Terminate这将导致以下事件序列:

  1. 来电PostQuitMessage
  2. Application.Terminated被设置为True
  3. Application.Run返回。
  4. System.Halt叫做。
  5. 运行退出程序,特别DoneApplication是它将拆除Application它拥有的所有组件。嗯,最好希望您的线程不会访问Application.
  6. FinalizeUnits叫做。哦哦。内存管理器已关闭,旁边还有更多。
  7. ExitProcess叫做。现在你的线程被杀死了。

您的线程将继续运行,直到调用ExitProcess. 如果它执行的任何代码都会受到对DoneApplicationand的调用的影响FinalizeUnits,那么您应该预料到会出现问题。

于 2013-04-22T08:50:03.760 回答