我在我的应用程序中使用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对象,因为定时器不会产生单独的线程。它们是什么?
答案 0 :(得分:2)
这些线程与threadpool相关联,特别是与Windows Vista一起引入的TpWorkerFactory对象管理器。 NtWaitForWorkViaWorkerFactory
(在线程#2中)是线程池的内部实现的一部分,而另外两个线程很可能是属于线程池的工作线程。
在RTL中,这些几乎肯定是为实现PPL单元中引入的System.Threading
功能而创建的默认对象。