Delphi中有哪些未知线程?

时间:2017-03-28 14:59:53

标签: multithreading delphi

我在我的应用程序中使用NameThreadForDebugging来命名我的所有自定义线程甚至主线程。

现在我在Delphi IDE的Threads窗口中看到七个线程。其中三个是我的线程,但另外四个没有名称并包含以下调用堆栈:

线程1

ntdll.NtWaitForMultipleObjects
kernel32.BaseThreadInitThunk
ntdll.RtlInitializeExceptionChain
ntdll.RtlInitializeExceptionChain

线程2

ntdll.NtWaitForWorkViaWorkerFactory
kernel32.BaseThreadInitThunk
ntdll.RtlInitializeExceptionChain
ntdll.RtlInitializeExceptionChain

主题3

ntdll.NtWaitForMultipleObjects
kernel32.WaitForMultipleObjectsEx
C:\Windows\syswow64\USER32.dll
USER32.MsgWaitForMultipleObjects

它们不是TTimer对象,因为定时器不会产生单独的线程。它们是什么?

1 个答案:

答案 0 :(得分:2)

这些线程与threadpool相关联,特别是与Windows Vista一起引入的TpWorkerFactory对象管理器。 NtWaitForWorkViaWorkerFactory(在线程#2中)是线程池的内部实现的一部分,而另外两个线程很可能是属于线程池的工作线程。

在RTL中,这些几乎肯定是为实现PPL单元中引入的System.Threading功能而创建的默认对象。