Вниз
Скачать: CL | DM;

Выгрузить библиотеку...   Найти похожие ветки 

 
@Ujin ©   (2003-10-31 13:20) [0]

Есть библиотеки, хранящие некоторы классы. Для каждого класса имеется счетчик объектов, ссылающихся на этот класс. Каким образом можно выгрузить библиотеку, когда счетчик ссылок обнуляется?...
Дело в том, что в деструкторе класса выгрузку библиотеки произвести нельзя. Есть ли какая-то альтернатива?


 
Юрий Федоров ©   (2003-10-31 13:22) [1]

Думаю что только снаружи.
В COM насколько я понимаю, проверка DllCanUnloadNow производится по таймеру.
Тут можно передавать в нее CallBack, который будет ее выгружать путем отправки PoasMessage


 
@Ujin ©   (2003-10-31 13:29) [2]

Юрий Федоров >
Какраз по таймеру я сейчас и работаю... Т.е. не совсем по таймеру... У меня есть процесс, который занимается проверкой счетчиков классов и отгружает неиспользуемые библиотеки... Но мне этот подход не совсем нравится из тех соображений, что некоторые классы могут использоваться "раз в 100 лет", а некоторые буквально постоянно, а система должна быть общей (однотипной) для всех библиотек... Вот загвоздочка получилась при переписывании объектов-оболочек для библиотек.
Слепил общий интерфейс для заргузки/отгрузки библиотеки и к нему базовый класс, реализующий функции. И очень хочется уйти от многопоточной схемы...


 
Юрий Зотов ©   (2003-10-31 13:50) [3]

Если я правильно понял, то библиотеку надо выгружать, когда ВСЕ счетчики ссылок станут нулевыми. Стало быть, в ней нужен ГЛОБАЛЬНЫЙ счетчик, который инкрементируется в конструкторе и декрементируется в деструкторе КАЖДОГО класса библиотеки. Если он стал нулевым - библиотека выгружается. Как именно - без разницы, только, конечно, не из нее самой. Например, она может послать сообщение-запрос на свою выгрузку окну или спящему потоку в EXE (cм. PostMessage, PostThreadMessage, WaitForMsgMultipleObjects), или может освободить любой объект синхронизации, который опять-таки ожидается спящим потоком в EXE (соответственно, тот проснется и выгрузит библиотеку).



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.022 c
3-40866
Term
2003-10-20 16:41
2003.11.13
Как правильно обрабатывать событие OnFilterRecord?


3-41057
axx
2003-10-24 11:15
2003.11.13
CachedUpdates в TTable


1-41490
griff
2003-11-04 15:09
2003.11.13
Проверка файлов


3-40888
User_OKA
2003-10-17 06:40
2003.11.13
Создание тригера.


1-41547
Golleador
2003-10-27 23:21
2003.11.13
Нужна помощь с переводом в Unicode.




   Наверх