gpt4 book ai didi

multithreading - 为什么 Delphi 应用程序有多个线程?

转载 作者:行者123 更新时间:2023-12-03 15:28:17 26 4
gpt4 key购买 nike

我发现我的 Delphi 应用程序有多个线程 - 更准确地说是 7 个线程。当然,我不会创建自己的线程,我只使用“经典”VCL 控件。程序闲置。它只显示主窗体。没有对话框处于事件状态,没有个人/Indy/等线程运行。

  1. 不应该只有一个线程(VCL 主线程)吗?
  2. 我如何知道其中哪个(已在运行的线程)是主线程?
<小时/>

注1:这与 Program freezes but the CPU utilization is zero 相关
注 2:我刚刚意识到其中 2 或 3 个线程来自调试器(当我暂停程序并调用“CPU View ”窗口时会出现额外的线程)。

最佳答案

正如您在评论中看到的,您问题第一部分的答案很广泛。只需在 Delphi XE7 中创建一个新的“VCL 表单应用程序”项目并运行它,我在“线程状态” View 中有 4 个线程。其他人提到了 TThreadedQueue、文件对话框、VCL 提示代码等作为未计算线程的来源。

对于问题的第二部分,我建议在启动时命名主线程,例如:

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

正如您在评论中提到的,您可能无法事先命名它,因此在现有的调试 session 中您可以临时执行此操作:

  • 调用评估/修改窗口

    • Ctrl+F7
    • 上下文菜单 > 调试 > 评估/修改
  • 输入 MainThreadID 作为要评估的表达式,从而得到您要查找的 ID。
  • 如果您愿意,可以使用“线程” View 中的上下文菜单条目“命名线程”来使用该 ID 命名线程。

Thread Status with names

也可以使用 IDE 识别其他线程。双击“线程” View 中的线程将打开当前调用堆栈。浏览一下,您可能已经能够判断这是本地 Delphi 线程还是外部线程。

例如,我未创建的“身份不明”外部线程之一具有以下调用堆栈:

enter image description here

虽然我为测试目的创建的 Delphi 线程具有以下内容,但 Delphi 单元是可识别的:

enter image description here

关于multithreading - 为什么 Delphi 应用程序有多个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46862724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com