2017-10-21 69 views
2

我已經看到我的Delphi應用程序有多個線程 - 更確切地說是7個。課程我不是創建自己的線程,而只是使用'經典'VCL控件。該程序空閒。它只是顯示主窗體。沒有對話框處於活動狀態,沒有個人/ Indy/etc線程正在運行。爲什麼Delphi應用程序有多個線程?

  1. 不應該只有一個線程(VCL主線程)?
  2. 我如何知道這些(已經運行的線程)中的哪一個是主線程?

注1:這是關係到Program freezes but the CPU utilization is zero
注2:我只是意識到2或那些線程的3是從調試器(額外的線程出現如果我暫停程序並調用「CPU查看'窗口)。

+0

Fordebugging目的,你可以命名線程。 – nil

+0

@nil - 我知道有關命名的線程。但是,這對我的具體情況有什麼幫助?它不能。 – Ampere

+1

第2點問這個問題。將其命名爲'Main'。有MainThreadID和CurrentThread來幫助識別。在你的程序開始期間,CurrentThread應該是我猜測的主要內容。 – nil

回答

2

正如你在評論中看到的,對你的問題第一部分的回答很寬泛。在Delphi XE7中創建一個新的「VCL Forms Application」項目並運行它,我在「線程狀態」視圖中有4個線程。其他人提到TThreadedQueue,文件對話框,VCL提示代碼和更多的作爲未統計線程的來源。

對於你的問題的第二部分,我建議用類似命名的主線程在啓動時:

TThread.NameThreadForDebugging('Main Thread', MainThreadID); 

正如你在評論中提到,你可能無法事先名字,所以在現有的調試會話,你可以做到這一點特設:

  • 調用評估/修改窗口

    • Ctrl鍵 + F7
    • 上下文菜單>調試>評價/在MainThreadID修改
  • Type爲表達eveluate,導致你正在尋找的ID。
  • 如果您希望您可以使用線程視圖中的上下文菜單項「名稱線程」來命名具有該ID的線程。

Thread Status with names

識別其他線程與IDE是可能的。雙擊線程視圖中的線程將打開當前調用堆棧。瀏覽一下,你可能已經能夠判斷這是一個原生的Delphi線程還是外部線程。

。例如「不明」一個 - 外 - 線程我沒有創建具有以下調用堆棧:

enter image description here

雖然我爲測試目的而創建一個Delphi線程下列操作,其中德爾福單位是可識別的:

enter image description here

相關問題