Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по Single-apartment COM-сервер 
:(
    Опции темы
ershovdz
Дата 6.5.2010, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 26.5.2007

Репутация: нет
Всего: нет



Есть такой вопрос (взят с Yandex сайта): вы пишете single-apartment COM-сервер, который выполняет одну очень медленную операцию и несколько очень быстрых. Расскажите как можно без создания дополнительных потоков и смены архитектуры сервера сделать так, чтобы при выполнении медленной операции сервер мог выполнять еще и быстрые?

Кто нибудь может что то сказать по этому поводу ? На 4 вопроса ответил, а последний как то в ступор ввел. Хочется прояснить ситуацию. Google чего то молчит..

Это сообщение отредактировал(а) ershovdz - 6.5.2010, 14:28
PM MAIL   Вверх
jonie
Дата 19.5.2010, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



законно как мне кажется никак. При одном экземпляре сервера возможна ситуация "одновременной работы", только если клиент имеет два потока (минимум) т.е. является MTA. Законным является метод работы в потоках клиента, когда экземпляр сервера регистрируется в GIT либо используется сериализация в IStream указателя. При этом важно понимать, что и тот и другой способ маршалинга подразумевает под собой использование прокси объекта при работе с сервером, который собственно и выполняет маршалинг (в случае STA сервера он это делает через скрытое окно и его сообщения, при этом используется SendMessage вероятно, который блокирует поток). Т.о. в случае использования прокси класса два потока будут "сливаться" в один на уровне перехода MTA->STA, а два метода одновременно работать в одном потоке не могут по определению.

Существует вариант использования простого указателя в другом потоке клиента (при этом клиент должен объявляться как STA иначе умный COM будет неявно маршалить), тогда да, можно сказать что вызов будет работать, но этот метод не является безопасным и накладывает ограничения на серверные операции (например, сервер не должен работать со своими внутренними членами в потоконебезопасном виде)....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0388 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.