![]() |
|
|
![]()
|
|
| ershovdz |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 26.5.2007 Репутация: нет Всего: нет |
Есть такой вопрос (взят с Yandex сайта): вы пишете single-apartment COM-сервер, который выполняет одну очень медленную операцию и несколько очень быстрых. Расскажите как можно без создания дополнительных потоков и смены архитектуры сервера сделать так, чтобы при выполнении медленной операции сервер мог выполнять еще и быстрые?
Кто нибудь может что то сказать по этому поводу ? На 4 вопроса ответил, а последний как то в ступор ввел. Хочется прояснить ситуацию. Google чего то молчит.. Это сообщение отредактировал(а) ershovdz - 6.5.2010, 14:28 |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
законно как мне кажется никак. При одном экземпляре сервера возможна ситуация "одновременной работы", только если клиент имеет два потока (минимум) т.е. является MTA. Законным является метод работы в потоках клиента, когда экземпляр сервера регистрируется в GIT либо используется сериализация в IStream указателя. При этом важно понимать, что и тот и другой способ маршалинга подразумевает под собой использование прокси объекта при работе с сервером, который собственно и выполняет маршалинг (в случае STA сервера он это делает через скрытое окно и его сообщения, при этом используется SendMessage вероятно, который блокирует поток). Т.о. в случае использования прокси класса два потока будут "сливаться" в один на уровне перехода MTA->STA, а два метода одновременно работать в одном потоке не могут по определению.
Существует вариант использования простого указателя в другом потоке клиента (при этом клиент должен объявляться как STA иначе умный COM будет неявно маршалить), тогда да, можно сказать что вызов будет работать, но этот метод не является безопасным и накладывает ограничения на серверные операции (например, сервер не должен работать со своими внутренними членами в потоконебезопасном виде).... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |