线程已分配
FreeOnTerminate := true;
我知道它的内存会在终止时被释放,但终止事件什么时候会发生?
或者,以更通用的方式,何时释放与某个线程相关的内存?
答案 0 :(得分:8)
释放线程时释放线程本身的内存(IOW,当它的析构函数退出时)。 FreeOnTerminate
只是意味着当线程终止时(Execute
方法退出),析构函数将自动被调用。
线程为其自己使用分配的任何内存都应该由其析构函数中的线程释放。
答案 1 :(得分:6)
当FreeOnTerminate
为真时,TThread
在调用TThread.DoTerminate()
之后释放自己的内存(在自身上调用自己的析构函数),在TThread.Execute()
被调用之后并退出。所以基本上,一旦DoTerminate()
被调用(内部触发TThread.OnTerminate
事件,如果已分配)并退出,假设TThread
对象不再有效,如果FreeOnTerminate
为真