![]() |
Модераторы: MetalFan |
![]() ![]() ![]() |
|
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Для контроля состояния потоков приложения, достаточно на каждый поток созать ProgressBar.
Однако,каждая запущенная копия приложения имеет свое окно,что не совсем (или совсем не) удобно. Одним из возможных решений является создание COM сервера, в виде exe. А в каждом потоке инициализировать интерфейс сервера. Вопрос. 1. Требуется ли дополнительная синхронизация при вызове методов COM сервера из потоков/приложений? 2. Как отменить закрытие COM сервера,после закрытия всех приложений подключаемых к нему? -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
cat512 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 3 Всего: 15 |
из такого описания мало что понятно! Например что такое
?
Эти "потоки приложения " где конкурируют? На клиенте или на сервере? Архитектуру можно построить разными способами. За это отвечает параметр "threading model" STA сериализует вызовы серверу. MTA, Free and Both - требуют синхронизации. Причём этот параметр актуален только для in-proc серверов. Если потоки создаются и конкурируют на out-proc сервере, то в этом случае необходима синхронизация.
Имеется ввиду уничтожение? Если да, то время жизни Com-объектов, контролируется механизмом подсчёта ссылок. Отсюда следствие, при иниц. сервера, хранить лишнюю ссылку на объект Это сообщение отредактировал(а) cat512 - 9.4.2011, 12:11 |
||||||
|
|||||||
Чучмек |
|
||||||||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
На сервере. Например: Поток вызывает метод сервера setProgress(Hthread,Hprocess,Percent); Куда передает дескриптор потока,процесса и степень выполнения. На сервере setProgress заносит эти параметры в структуру вида:
увеличивая ThreadProgressRec.size Основной поток сервера, по таймеру, извлекает данные из структуры ThreadProgressRec и обновляет отображаемую информацию. Понятно, что проблема синхронизации решается вызовом EnterCriticalSection/LeaveCriticalSection.
По умолчанию, если не ошибаюсь (нет дельфей под руками), идет multithreaded apartment model.?.? И от этого??? параметра зависит- создается один, общий, COM обьект для всех вызовов или для каждого свой.???
Так чтоли? Однако это, помоему, через Ж. Есть ли, хотябы, способ отлавливать(на сервере) создание COMobject -------------------- умную мысль держи при себе, а дурной - поделись с другими |
||||||||
|
|||||||||
cat512 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 3 Всего: 15 |
Нет не так. То что ты описал, зависит от двух параметров Threading model и Instancing. Instancing - определяет, как будут обрабатываться вызовы клиентов (одним общим объектом или отдельным для каж. вызова) Threading model - определяет, будут ли доступны и каким образом, объекты сервера в многопоточной среде.
Как абстрактно был задан вопрос, такой ответ на него ты и получил! Если есть воображение, то не вижу проблемы сделать это по другому. Например реализовать свой протокол освобождения объектов, между клиентом и сервером, или например реализовать некий диспетчер, который будет перехватывать вызовы на уничтожения объекта.
Конечно же есть. При создании объекта, всегда вызывается метод Initialize. Думаю дальше сам догадаешься что делать |
||||||
|
|||||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
ага нашел, override. А для завершения - переопределить destroy.? -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 3 Всего: 15 |
||||
|
||||
Чучмек |
|
||||||||||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Да здравствует "ВСЕ ЧЕРЕЗ ЖОПУ"!!! -------------------- умную мысль держи при себе, а дурной - поделись с другими |
||||||||||
|
|||||||||||
cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 3 Всего: 15 |
чё - то у тебя как то сложно всё
![]() |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: ActiveX/СОМ/CORBA" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |