6

可能重复:
默认 VCL 应用程序中的其他线程是什么,它们可以按目的命名吗?

在 Delphi XE2(32 位)中运行一个新的空 VCL Forms 应用程序时,我看到这个应用程序的任务管理器中有 4 个线程正在运行。显然任何应用程序都需要至少 1 个线程,但在这种情况下,其他 3 个线程是什么?我想更好地了解任何 VCL 表单应用程序默认运行的线程。我想可能是因为我在 RAD Studio 的调试模式下运行,所以我自己启动了 EXE,它也有 4 个线程在运行。我还尝试在“发布”配置下编译(从而禁用编译调试信息)并且仍然有 4 个线程。

在此处输入图像描述

4

2 回答 2

8

要确定线程的来源,您可以使用process explorerprocess hacker等工具检查线程的起始地址。

在此处输入图像描述

例如,在这种情况下,您可以看到

  • ntdll.dll!TpCallbackIndependent+0x???? 它是 Windows 线程池 API 的一部分。
  • ntdll.dll!RtlMoveMemory+0x???? 是对RtlMoveMemory WinAPi 函数的调用。
  • 项目???.exe+0x????? 应用程序的主线程。
于 2012-07-02T04:51:41.833 回答
5

在我的计算机上创建了除主线程之外的所有其他线程,因为应用程序的窗口已注册以使用 Wtsapi32.WTSRegisterSessionNotification API 接收会话更改通知。您可以在 Vcl.Forms -> TApplication.CreateHandle 过程中看到实现。当您通过终端服务/远程桌面登录时,它必须与应用程序的工作方式/外观有关。可能存在其他一些线程,因为其他一些程序/s 将代码加载到您的可执行文件中。

于 2012-07-02T06:35:41.937 回答