簡體   English   中英

在Android的Delphi 10中終止線程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM