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

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

Запуск Dll в отдельном потоке [D7, WinXP]


Dmitriy G. ©   (2005-08-11 17:16:00) 

Необходимо загрузить функцию из Dll и через некоторое время, если функция например зависла выгрузить dll из памяти и освободить все ресурсы, выделенные dll-кой в процессе работы.
Для этого создаю отдельный поток в котором собственно и загружаю dll-ку. Но проблема с прибиванием... Dll может запустить произвольный exe файл, в котором могут быть свои потоки... Поэтому приходится самому строить дерево процессов, закрывать все дочерние процессы и Handles, которые появились после загрузки библиотеки в порожденных процессах/потоках. В принципе работает но попадаются "неприятные" exe-ки у которых не получается закрыть все открытые Handle...
И вообще такая система не выглядит достаточно стройной... Может есть метод проще?

Заранее благодарен...


Leonid Troyanovsky   (2005-08-11 19:10:00) [1]


> Dmitriy G. ©   (11.08.05 17:16)  


Туманно как-то.
Что это за функция, которая нуждается в запуске процессов?
И, почему, собс-но, в dll?
Да и какое ей дело до судьбы процессов?

Предположим, что нам очень надо вызвать функцию из некоторой
несамописной dll, в поведении которой мы не очень уверены.
Для этого, наиболее приемлем вариант с вызовом оной библиотечной
функции из отдельного процесса.
Т.е., надо сделать отдельное приложение, которое специализируется
на работе с этой библиотекой: принимает параметры, делает вызовы
и возвращает результат, например, через WM_COPYDATA.
В случае возникновения сложностей процесс прибивается,
вплоть до TerminateProcess.

Во всяком случае, никаких проблем с собс-ным приложением нет.

--
Regards, LVT.


alpet   (2005-08-11 18:56:00) [2]

Что-то странно даже, если dll запускает произвольныйexe файл, какбы это к проблемам не привело потом.


troits   (2005-08-11 18:42:00) [3]

А что значит - "не получается закрыть все открытые Handle."? Если процесс "пришибается", например TerminateProcess, то вместе с ним освобождаются все ресурсы, на которые не ссылаются другие процессы. То есть, следить надо только за процессами?


Наверх

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