簡體   English   中英

Delphi中的后台線程

[英]Background threads in delphi

Delphi是否有任何模擬指定某個線程是后台線程? 至於.NET,我可以說SomeThread.IsBackground = true; 並且該線程將成為背景。 提前致謝!

.net文檔描述了IsBackground屬性,如下所示:

線程可以是后台線程,也可以是前景線程。 后台線程與前台線程相同,只是后台線程不會阻止進程終止。 一旦屬於某個進程的所有前台線程都已終止,公共語言運行庫將終止該進程。 任何剩余的后台線程都會停止並且無法完成。

.dpr文件中的主要功能完成時,Delphi進程終止。 該main函數始終在主進程線程的上下文中運行,即進程啟動時系統自動創建的線程。

因此,在Delphi中沒有等效屬性。 使用.net術語,只有一個前台線程,即主線程,所有其他線程均為后台線程。 線程在運行時無法將狀態從前台更改為后台,反之亦然。

要驗證當前線程是VCL主線程,請檢查TThread.CurrentThread.ThreadID = MainThreadID(*)。 主VCL線程應該保留在前台線程中,並且是唯一應更新GUI的線程,因此問題的答案為“否”。

如果使用的是Delphi的最新版本,則可以使用TThread.CreateAnonymousThread和TThread.Synchronize來分別在后台線程或主VCL線程中執行匿名方法。

*)請注意,CurrentThread類屬性僅添加了幾個版本。 如果使用的是較舊的Delphi版本(例如Borland Delphi 7),則只能從線程的execute方法(或Execute等調用的任何方法)內執行此檢查。

在Delphi中,除主線程外的每個線程都是后台線程。 這就是為什么您只能從主線程更新GUI的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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