在一个空的新VCL表单应用程序下运行4个线程?

时间:2012-07-02 02:04:16

标签: multithreading delphi delphi-xe2 vcl

  

可能重复:
  What are the other threads in a default VCL application, and can they be named by purpose?

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

enter image description here

2 个答案:

答案 0 :(得分:8)

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

enter image description here

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

  • NTDLL.DLL!TpCallbackIndependent + 0X ?????这是Windows线程池API的一部分。
  • NTDLL.DLL!RtlMoveMemory + 0X ?????是对RtlMoveMemory WinAPi函数的调用。
  • 项目??。埃克+ 0X ????? App的主要主题。

答案 1 :(得分:5)

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