我读到的这篇文章几乎解决了我的问题,因为没有人回答我的评论,我决定提出一个问题:
Original Post that almost answer my question
正如我在那里所问:
既然多个线程可能共享同一个OnTerminate
事件,那么它们是否也可能同时完成?
如果是,会发生什么?对OnTerminate
方法的调用将由O.S“排队”?换句话说,如果使用MainThread
属性,代码是否不可重入?
最佳答案
可能有多个线程共享同一个onTerminate事件
是的,正如the other question的答案告诉你的那样。
同时完成?
线程可以同时完成其工作,但默认情况下,不会同时调用OnTerminate
事件处理程序。这是因为OnTerminate
事件处理程序是由TThread
使用对TThread.Synchronize()
的内部调用触发的,因此同时触发其OnTerminate
事件的多个线程不会相互重叠。要改变这种行为(大多数人不这样做),您必须重写virtualTThread.DoTerminate()
方法,以便直接手动调用OnTerminate
事件处理程序,而不必首先调用TThread.Synchronize()
。