:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046

Блокировка при уничтожении ActiveX

10.04.2014, 12:03. Показов 1370. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Есть ActiveX модуль, написанный на C++ Builder 6. Исходники есть, возможность правки присутствует. Но нет полного понимания механизма работы.
Периодически наблюдается блокировка при уничтожении объекта. В отладчике вижу, что вишу в TBitmap::FreeContext.
Если исключить вызов деструктора TBitmap (например выделить память, но не удалять), то блокировки не наблюдается, но конечно идет жор памяти.

Вопрос в следующем: может ли блокировка происходить из-за неправильного (неожиданного) уничтожения ActiveX? Т.е. скажем начало уничтожения объекта пока идет прорисовка на упомянутом битмапе.

Было бы неплохо, если бы кто-то прояснил ещё про жизненный цикл объекта ActiveX.

Заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.04.2014, 12:03
Ответы с готовыми решениями:

Какова последовательность 'событий' при рождении и при уничтожении окна?
Какова последовательность 'событий' (оконных сообщений) при рождении и при уничтожении окна? При рождении вроде самое последнее -...

Ошибка при уничтожении указателя
Всем привет. Решил досканально разобраться в работе указателей и ссылок. Всё понятно в общем целом, но есть один момент. ...

АИ- ошибка при уничтожении объекта
Помогите пожалуйста с АИ, каждый из АИ должен двигаться к друг другу, я написал код ниже, но, когда один из АИ умирает(уничтажаю оъект...

4
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
10.04.2014, 21:56
Цитата Сообщение от Tulosba Посмотреть сообщение
Было бы неплохо, если бы кто-то прояснил ещё про жизненный цикл объекта ActiveX.
Там действуют фундаментальные правила COM:
У клиента есть ссылка. Пока он работает с объектом, ссылка удерживается.
Когда объект больше не нужен, ссылка освобождается (p->Release).
Если указатель передается кому-то другому, счетчик ссылок увеливичается (p->AddRef).
Рано или поздно счетчик ссылок станет равным нулю и объект сам себя уничтожит.

Managing Object Lifetimes Through Reference Counting
http://msdn.microsoft.com/en-u... 85%29.aspx

Если исключить вызов деструктора TBitmap (например выделить память, но не удалять), то блокировки не наблюдается
Не помешали бы "раскопки" этого самого деструктора TBitmap с поиском
конкретной причины блокировки.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.04.2014, 22:05  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Рано или поздно счетчик ссылок станет равным нулю и объект сам себя уничтожит.
Это понятно. Но вот как быть, если крутится ещё один поток и в этот момент начинается процесс уничтожения?
В обработчике (деструкторе?), который срабатывает при уничтожении ActiveX дать команду на завершение потока, дождаться его завершения и всё будет ок?
Цитата Сообщение от Убежденный Посмотреть сообщение
Не помешали бы "раскопки" этого самого деструктора TBitmap с поиском
конкретной причины блокировки.
Я так понимаю, что по какой-то причине у него залочена канва (Canvas), и FreeContext как раз ожидает разблокировки. Но это пока догадки нормальной доки не нашел что-то.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
10.04.2014, 22:12
Цитата Сообщение от Tulosba Посмотреть сообщение
Это понятно. Но вот как быть, если крутится ещё один поток и в этот момент начинается процесс уничтожения?
Если имеется в виду внешний, т.е. еще один клиентский поток, использующий
объект, Такого не должно быть (в идеале). Если два потока используют объект,
ссылок тоже будет две.

В обработчике (деструкторе?), который срабатывает при уничтожении ActiveX дать команду на завершение потока, дождаться его завершения и всё будет ок?
А разве есть другие варианты корректно уничтожить объект, если он
создает свои потоки ?
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
10.04.2014, 22:22  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Если имеется в виду внешний, т.е. еще один клиентский поток, использующий
объект,
Внутри кода ActiveX создается новый поток, который занят некоторой своей фоновой задачей.
Цитата Сообщение от Убежденный Посмотреть сообщение
А разве есть другие варианты корректно уничтожить объект, если он
создает свои потоки ?
Ваша правда.
Видимо нужно ещё поразбирать имеющийся код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.04.2014, 22:22
Помогаю со студенческими работами здесь

Уничтожится ли элемент при уничтожении класса?
Вопрос в шапке, создаю type kek = class (Tobject) public T: Tstringlist; constructor Create(); end; var SomeThing: kek;

Передача значения при уничтожении потока
Ребята не подскажите можно ли так передавать значение из потока при его уничтожение. void __fastcall TForm3::MyNewScan() { ...

Уничтожении сессии при перезагрузке страницы
Доброе утро! Есть сайт с калькулятором http://oknamarkt.com/kalkulyator/ После того как произведен расчет, при очередной перезагрузке...

Блокировка клавиши при нажатии в одной форме и блокировка в другой, третьей
Здравствуйте нужно что бы при вызове помощи в 1ом вопросе она блокировалась во 2ом вопросе,подскажите как сделать. Вам нужно...

Посодействуйте в уничтожении вирусов
Здравствуйте! Помогите избавиться от вирусов. выскакивают окошки в ВКонтакте, открываются рекламные окна, а теперь в Мозилле открылось...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru