Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: 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 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.03 c
7-42177
elected
2003-08-29 10:59
2003.11.13
Как сменить серийный номер тома ?


3-40926
Alex
2003-10-19 13:12
2003.11.13
Поиск повторяющихся записей


6-41844
LOX
2003-09-10 07:48
2003.11.13
Отпрака письма


7-42155
Olexander
2003-09-01 15:17
2003.11.13
Thread + Win98 = ?


4-42302
maxi
2003-09-09 12:21
2003.11.13
Как програмно открыть файл с заданным расширением(например .rm)?