Имеется WPF приложение, внутри которого бегают нативные ActiveX-контролы. Под XP - все хорошо. Под вистой возникла проблема. Создаю пару потоков, потом их прибиваю, потом пытаюсь создать снова - CreateThread возвращает ERROR_NOT_ENOUGH_MEMORY. Погуглил. Гугл предложил уменьшить Stack size. Уменьшил до 4-х килобайт - результат тот же Vista 32бита, бежит под вмварой, 1 гиг памяти. Однако вмвара точно не при чем - у кастомера на живой все тоже самое. Мысли? Идеи? Троллинг?
Еще более точно: У контрола есть некий метод, который дергается из WPF-ной апликухи. Дергается два раза. Первый раз - создаются два потока. Второй раз - потоки корректно завершуются (джойняца) и пытаются создаться заново, где собсна и происходит fail. Примерно так: 1. WPF working... 2. ActiveX.Foo() CreateThread(CREATE_SUSPENDED); ResumeThread(); CreateThread(CREATE_SUSPENDED); ResumeThread(); 3. WPF working... 4. ActiveX.Foo() WaitForSingleObject(); CloseHandle(); WaitForSingleObject(); CloseHandle(); CreateThread(CREATE_SUSPENDED); // Epic Fail !
И еще Если во время первого Foo создать пиисят потоков и запустить чтобы они вечно бегали, то все они создадутся и все будет ок. Если создать два - удалить два - создать два - удалить два - ... То все тоже будет ок. Ломается все именно во втором вызове Foo. Из чего можно на 80% сделать вывод, что неведомая гусиная х#йня происходит внутри WPF между вызовами функций контрола...
ОМГ, разобрался))) WPF тут видимо не при чем Ситуация была такова: В некоторый момент происходило следующее: В потоке "A": WaitForSingleObject(Поток "X"); CloseHandle(Поток "X"); В потоке "B": WaitForSingleObject(Поток "Х"); При этом судя по всему сначала отрабатывал поток "A", дожидался завершения потока "X" и закрывал его хендл. После этого управление передавалось потоку "B", который оказывался в состоянии ожидания завершения уже закрытого потока. Походу от этого висте сносило башню и она больше не могда создавать новые потоки. Интерено сравнить поведение Vista с XP - кто из них ведет себя правильно. Всем, кто эти два с половиной часа мыслями был со мной, спасибо за моральную поддержку :-D