Вопрос

Мы наблюдаем 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, которые также используют пару потоков.У вас действительно нет возможности управлять этими потоками.

Я серьезно сомневаюсь, что именно эти потоки являются причиной ошибки нехватки памяти.Более вероятно, что проблема заключается в том, что в вашем процессе недостаточно непрерывной памяти, чтобы зарезервировать место для стека нового потока.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top