一個線程若是退出時,咱們習慣寫下以下代碼:線程
AThread.Terminate; ... AThread.WaitFor; AThread.Free;
但在DLL中調用會在WaitFor的地方出現死等的現象,線程沒法退出。code
改成下面的代碼能夠解決:對象
AThread.Suspended:=False;//線程若是沒運行強制運行 while not AThread.Started do//線程若是沒有處於已啓動狀態,等待它啓動完成 Sleep(10); AThread.Terminate;//通知線程結束 //等待線程退出 while not AThread.Finished do Sleep(10); //釋放線程對象 AThread.Free;
對於Delphi早期版本,TThread的Finished屬性並無公開,此時,咱們須要一些很是手段來處理下。it
如Delphi 2007,咱們經過跟蹤,可知道其FFinished的原始地址爲Integer(Self)+16,便可以如此判斷:while
PBoolean(Integer(AThread)+16)^co