2010-03-20 39 views
4

我們在Windows 7 X64的在具有螺紋和在任何Windows行爲正常(32或64位)之前的Windows 7奇怪線程在應用程序在Win7 WOW64

應用觀察 4-6線程

進程資源管理器示出了下面的 「未知」 線程:

ntdll.dll!EtwDeliverDataBlock+offset 
隨機

間隔之後下列線程出現:

ntdll.dll!TpCallbackIndependent+offset 
ntdll.dll!TpCallbackIndependent+offset 

之後,應用程序無法創建線程(錯誤代碼8,足夠熱空間...)。

在我看來,一些系統DLL創建ETW線程或東西。有誰知道這些線程以及如何管理它們?

回答

5

TP線程是Windows線程池API的一部分,並且是因爲您的應用程序(或您的應用程序使用的DLL)使用了Windows線程池API而創建的。它也似乎是你的應用程序(或你的應用程序使用的DLL之一)正在使用也使用一些線程的ETW API。你真的沒有能力管理這些線程。

我嚴重懷疑那些線程是什麼導致了內存不足錯誤。問題更可能是您的進程中沒有足夠的連續內存來爲新線程的堆棧預留空間。

+0

你說得對,我相信。我用procmon來捕獲CreateThread調用,它顯示ws2_32.dll初始化線程池。仍然相當複雜,爲什麼Win7中實現如此不同...以及爲什麼winsock庫需要TP。 – Shcheklein 2010-03-22 18:35:34

+1

基本上使用TP API成爲處理異步操作而不創建專用線程的便捷方式 - 理論上,如果多個DLL全部使用同一個線程池,則系統上的總體線程負載較低。 – 2010-03-23 00:00:05