2017-10-21 84 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

相关问题