[英]Terminating a thread in Delphi 10 with Android
我正在使用以下指示的基本設置創建一個線程。 顯然,一切正常,但是當我運行MyThread.Terminate
我注意到Destroy
無法運行。 Destroy
僅在關閉主應用程序時執行。
結束線程的正確方法是什么?
基本線程
// MyThread "TPoolingThread"
constructor TPoolingThread.Create;
begin
inherited Create(True);
// Initializing something
end;
destructor TPoolingThread.Destroy;
begin
inherited Destroy;
end;
procedure TPoolingThread.Execute;
begin
try
while (not Terminated) do begin
sleep(100);
// do something
end;
finally
if not Terminated then
Terminate;
end;
end;
執行線程
// Main Application
//////////////////////////////////////////
// Create and Start
MyThread := TPoolingThread.Create;
if Assigned(MyThread.FatalException) then
raise MyThread.FatalException;
MyThread.Start;
//////////////////////////////////////////
// Stop
MyThread.Terminate;
. 我想通過定義來開頭我的回答。 you mean to stop your loop in the TPoolingThread.Execute
procedure. 我將假設通過意味着停止TPoolingThread.Execute
過程中的循環。
終止線程
用於終止線程的方法是完全可以接受的。 現在,為什么,請允許我向您展示此片段 :
版本1
在Try-Finally構造中,無論try子句中發生了什么,都保證可以絕對執行Final語句。 但是,Finally子句實際上並不處理任何異常-如果未找到Except子句,則程序將終止(請參見下面的注釋)。
因此,如果循環中的代碼引發異常,則告訴TPoolingThread
對象它已終止。
為什么銷毀沒有被召喚
正如雷米·勒博(Remy Lebeau)和達莉亞·普拉斯尼卡(Dalija Prasnikar)所說 。 終止不應該稱為銷毀:
System.Classes.TThread.Terminate:
通過將Terminated屬性設置為true來指示線程終止。 Terminate將線程的Terminated屬性設置為true,表示應盡快終止線程。
為了使Terminate起作用,線程的Execute方法和Execute調用的任何方法都應定期檢查Terminated並在其為true時退出。
如果您想了解有關Delphi中用於Android開發的ARC的更多信息,我將保留此鏈接 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.