線程分配了在Delphi的線程中,何時釋放內存?
FreeOnTerminate := true;
據我所知,這是它結束時,西港島線的內存被釋放,但什麼時候該終止事件發生?
或者,以更通用的方式,什麼時候釋放某個線程的內存?
線程分配了在Delphi的線程中,何時釋放內存?
FreeOnTerminate := true;
據我所知,這是它結束時,西港島線的內存被釋放,但什麼時候該終止事件發生?
或者,以更通用的方式,什麼時候釋放某個線程的內存?
當FreeOnTerminate
是真實的,TThread
釋放自己的內存(調用本身自己的析構函數)之後TThread.DoTerminate()
已經調用了退出,之後TThread.Execute()
已經調用了退出。因此,基本上,一旦調用DoTerminate()
(它在內部觸發TThread.OnTerminate
事件,如果已分配)並退出,假設您的TThread
對象不再有效,如果FreeOnTerminate
爲真。
當線程被釋放時(IOW,當析構函數退出時)線程本身的內存被釋放。 FreeOnTerminate
只是意味着當線程被終止(Execute
方法退出)時,析構函數會自動調用。
線程爲其自身使用分配的任何內存都應由線程在其析構函數中釋放。
@DavidHeffernan:AFAIR,TThread.Terminate是一個標誌屬性(執行方法可以忽略或服從),表明線程必須完成它的工作** NOW **。 –
@DavidHeffernan:'FTerminated'(IIRC)標誌已通過調用「TThread.Terminate」設置。肯:那個「或」應該是「和」。或者實際上整個終止事物可以在那裏被移除。 terminate標誌可以被execute方法忽略,並且execute方法可以在沒有調用Terminate的情況下終止。 –
@MarjanVenema:由於'Execute'可以在沒有標誌被設置退出,是不是'或'更合適的(或者是'Terminate'標誌被設置和'Execute'檢查它並退出,* OR *的'執行'功能完成沒有'終止'被設置)? (再次想到,如果'Execute'沒有檢查它,'Terminate'本身不做任何事情,所以你是對的,我會編輯。謝謝。) –
沒有'Terminate'事件。所有你需要知道的都可以在名爲'ThreadProc'的程序中找到,它可以在'Classes'中找到。 –