:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
1 | |
Блокировка при уничтожении ActiveX10.04.2014, 12:03. Показов 1263. Ответов 4
Метки нет (Все метки)
Всем привет.
Есть ActiveX модуль, написанный на C++ Builder 6. Исходники есть, возможность правки присутствует. Но нет полного понимания механизма работы. Периодически наблюдается блокировка при уничтожении объекта. В отладчике вижу, что вишу в TBitmap::FreeContext. Если исключить вызов деструктора TBitmap (например выделить память, но не удалять), то блокировки не наблюдается, но конечно идет жор памяти. Вопрос в следующем: может ли блокировка происходить из-за неправильного (неожиданного) уничтожения ActiveX? Т.е. скажем начало уничтожения объекта пока идет прорисовка на упомянутом битмапе. Было бы неплохо, если бы кто-то прояснил ещё про жизненный цикл объекта ActiveX. Заранее спасибо.
0
|
10.04.2014, 12:03 | |
Ответы с готовыми решениями:
4
Какова последовательность 'событий' при рождении и при уничтожении окна? Ошибка при уничтожении указателя АИ- ошибка при уничтожении объекта Уничтожится ли элемент при уничтожении класса? |
Ушел с форума
|
|
10.04.2014, 21:56 | 2 |
Там действуют фундаментальные правила COM:
У клиента есть ссылка. Пока он работает с объектом, ссылка удерживается. Когда объект больше не нужен, ссылка освобождается (p->Release). Если указатель передается кому-то другому, счетчик ссылок увеливичается (p->AddRef). Рано или поздно счетчик ссылок станет равным нулю и объект сам себя уничтожит. Managing Object Lifetimes Through Reference Counting http://msdn.microsoft.com/en-u... 85%29.aspx конкретной причины блокировки.
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
10.04.2014, 22:05 [ТС] | 3 |
Это понятно. Но вот как быть, если крутится ещё один поток и в этот момент начинается процесс уничтожения?
В обработчике (деструкторе?), который срабатывает при уничтожении ActiveX дать команду на завершение потока, дождаться его завершения и всё будет ок? Я так понимаю, что по какой-то причине у него залочена канва (Canvas), и FreeContext как раз ожидает разблокировки. Но это пока догадки нормальной доки не нашел что-то.
0
|
Ушел с форума
|
|
10.04.2014, 22:12 | 4 |
Если имеется в виду внешний, т.е. еще один клиентский поток, использующий
объект, Такого не должно быть (в идеале). Если два потока используют объект, ссылок тоже будет две. создает свои потоки ?
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
10.04.2014, 22:22 [ТС] | 5 |
Внутри кода ActiveX создается новый поток, который занят некоторой своей фоновой задачей.
Ваша правда. Видимо нужно ещё поразбирать имеющийся код.
0
|
10.04.2014, 22:22 | |
10.04.2014, 22:22 | |
Помогаю со студенческими работами здесь
5
Передача значения при уничтожении потока Уничтожении сессии при перезагрузке страницы Блокировка клавиши при нажатии в одной форме и блокировка в другой, третьей Посодействуйте в уничтожении вирусов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |