Здравствуйте Аноним, Вы писали:
I'm sorry I got already the link of your project...
А>Опытные разработчики мультитредовых приложений, использующих COM объекты (в данном случае mshtml.dll)! Помогите разобраться с проблемой, над которой я бьюсь уже болше полугода и не вижу даже свет в конце туннеля...
А>Сутьпроблемы в следующем:
А>Есть мультитредовый проект. Каждый поток порождает объект UI-less парсер (взятый с EuroMind). Все что нужно сделать каждому потоку — взять html документ, дождаться полной его загрузки, вернуть результат в виде коллекции HTML элементов (IHTMLElementCollection). Этот процесс происходит в бесконечном цикле внутри каждого потока.
А>Когда запущен 1 поток, все ОК. Но когда добавляешь еще, со временем происходит подвисание проги. Причем подвисание довольно интересного вида — при попытке закрыть приложение, работа ВСЕХ ПОТОКОВ ПРОДОЛЖАЕТСЯ. Т.Е. программа как бы снова оживает. Но опять не на долго.
А>По всей видимости имеет место какая-то проблема из следующих
А>1) Неправильно создан COM в рамках потока
А>2) Неправильно синхронизированы потоки и методы, в них происходящих.
А>3) Неправильно организована работа с сигналами (PostThreadMessage и т.п.)
А>Возможно специалист в области COM программирования обнаружит еще какую-нибудь ошибку, но я вижу только эти...
А>Проект не сложный, Но ввиду невозможности публиковать здесь весь код приложения, даю ссылку на ZIP файл. Только simple_html.htm нужно положить именно в то место, которое прописано в коде программы (именно этот файл загружается каждым потоком). По умолчанию это 'C:\simple_html.htm'. Проект cool site