Странные потоки в приложении в Win7 WOW64
Вопрос
Мы наблюдаем 4-6 потоки в Windows 7 x64 в приложении, которые имеют 3 потоки и ведет себя нормально в любой Windows (32- или 64-разрядной), предшествующей Windows 7.
Process Explorer показывает следующий "неизвестный" поток:
ntdll.dll!EtwDeliverDataBlock+offset
после случайного интервала появляются следующие потоки:
ntdll.dll!TpCallbackIndependent+offset
ntdll.dll!TpCallbackIndependent+offset
после этого приложение не может создать поток (код ошибки 8, недостаточно свободного места ...).
Мне кажется, что какая-то системная DLL создает потоки ETW или что-то в этом роде.Кто-нибудь знает, для чего нужны эти потоки и как ими управлять?
Решение
Потоки TP являются частью Windows threadpool API и создаются потому, что ваше приложение (или библиотека DLL, используемая вашим приложением) использовало Windows threadpool API.Также похоже, что ваше приложение (или одна из библиотек DLL, используемых вашим приложением) использует ETW API, которые также используют пару потоков.У вас действительно нет возможности управлять этими потоками.
Я серьезно сомневаюсь, что именно эти потоки являются причиной ошибки нехватки памяти.Более вероятно, что проблема заключается в том, что в вашем процессе недостаточно непрерывной памяти, чтобы зарезервировать место для стека нового потока.