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