簡單說說Delphi中線程的釋放
阿新 • • 發佈:2017-07-24
keyword con 停止 標誌位 在線 creat 自動釋放 num sdn
線程的釋放方式有兩種:一種是線程在運行完成後自動釋放,一種是手動釋放。
無論是那種釋放,都應該在線程停止後進行釋放。
然而線程的停止也有兩種情況:一種是不需要設置標誌位,直接完成;一種是由於execute方法中做了循環,需要設置標誌位才能停止。
如果線程已經停止並且自動釋放,再去手動停止,就會報錯。
下面看代碼:
1、自動停止後自動釋放的線程:
[delphi] view plain copy
- constructor TTestThread.Create;
- begin
- inherited Create( True );
- FreeOnTerminate := True;
- end;
- procedure TTestThread.Execute;
- begin
- ....//功能代碼
- //此方法完成後線程就已經停止了
- end;
這種情況線程會自動釋放,因此不要手動釋放,否則會報錯
2、手動停止後自動釋放的線程:
[delphi] view plain copy- constructor TTestThread.Create;
- begin
- inherited Create( True );
- FreeOnTerminate := True;
- end;
- procedure TTestThread.Execute;
- begin
- while not Terminated do //not Terminated do
- begin
- ....//功能代碼
- end;
- end;
- procedure Test
- begin
- t1 := TTestThread.Create( Self );
- t1.Terminate;
- end;
3、手動釋放的線程:
[delphi] view plain copy- constructor TTestThread.Create;
- begin
- inherited Create( True );
- end;
- procedure TTestThread.Execute;
- begin
- while not Terminated do //not Terminated do
- begin
- ....//功能代碼
- end;
- end;
- procedure Test
- begin
- t1 := TTestThread.Create( Self );
- t1.Terminate;
- t1.WaitFor;
- t1.Free;
- end;
那麽,何時使用自動釋放的線程,何時使用手動釋放的線程呢
我的建議是:
如果這個線程運行時間很短或者能保證在系統退出前完成運行,則可以選擇自動釋放,因為它可以很快自動釋放掉
如果這個線程運行貫穿系統運行整個期間,則要選擇手動釋放了
http://blog.csdn.net/youthon/article/details/6721692
簡單說說Delphi中線程的釋放