Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SOS. MSHTML в дауне... [D5, D6, Win95/98, WinME, NT4, Win2k, WinXP]


w666w ©   (2002-07-02 10:40:00) 

Опытные разработчики мультитредовых приложений, использующих COM объекты (в данном случае mshtml.dll)! Помогите разобраться с проблемой, над которой я бьюсь уже болше полугода и не вижу даже свет в конце туннеля...

Сутьпроблемы в следующем:

Есть мультитредовый проект. Каждый поток порождает объект UI-less парсер (взятый с <a href=" http://www.euromind.com/iedelphi/uilessparser.htm">EuroMind</a>). Все что нужно сделать каждому потоку - взять html документ, дождаться полной его загрузки, вернуть результат в виде коллекции HTML элементов (IHTMLElementCollection). Этот процесс происходит в бесконечном цикле внутри каждого потока.

Когда запущен 1 поток, все ОК. Но когда добавляешь еще, со временем происходит подвисание проги. Причем подвисание довольно интересного вида - при попытке закрыть приложение, работа ВСЕХ ПОТОКОВ ПРОДОЛЖАЕТСЯ. Т.Е. программа как бы снова оживает. Но опять не на долго.

По всей видимости имеет место какая-то проблема из следующих

1) Неправильно создан COM в рамках потока
2) Неправильно синхронизированы потоки и методы, в них происходящих.
3) Неправильно организована работа с сигналами (PostThreadMessage и т.п.)

Возможно специалист в области COM программирования обнаружит еще какую-нибудь ошибку, но я вижу только эти...

Проект не сложный, Но ввиду невозможности публиковать здесь весь код приложения, даю ссылку на ZIP файл. Только simple_html.htm нужно положить именно в то место, которое прописано в коде программы (именно этот файл загружается каждым потоком). По умолчанию это "C:\simple_html.htm". Проект <a href=" http://www.ncstu.ru/sample.zip">здесь</a>


int64   (2002-07-02 15:58:00) [1]

Ты используешь глобальную переменную Doc : IhtmlDocument2.

Каждый школьник знает, что бывает при использовании глобальных переменных в потоках.

Перерисуй её в класс TUILess.


Наверх

Титульная страница Поиск, карта сайта Написать письмо