【轉】線程正確的退出等待方式

一個線程若是退出時,咱們習慣寫下以下代碼:線程

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

相關文章
相關標籤/搜索