ИНФОРМАЦИЯ: Блокировка вызовов из компонента STA не использовать

Переводы статьи Переводы статьи
Код статьи: 291837 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Аннотация

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

Вызов считается блокировки, если долго или не определен объем времени, например вызовы базы данных, сетевые вызовы, которые используют вызов удаленных процедур (RPC), или разъемы.

Кроме того Microsoft Visual Basic можно создавать только STA приложений и компонентов, потоковая модель, в которой находится контейнер или отсутствует. Таким образом не должен делать блокирующих вызовов от компонента, написанные на Visual Basic.

Дополнительная информация

Потоковая модель, в которой находится контейнер компонентов в режиме реального времени в однопотоковом апартаменте (STA). Несколько экземпляров объекта COM может находиться в одной STA. Тем не менее, есть только один поток (отсюда название), службы все экземпляры объектов COM в этом подразделении. Если блокировка вызова одного из этих экземпляров объекта COM, другие экземпляры объектов COM отчаянно из-за блокировки только поток, который может обслуживать их.

Блокировка вызовов компонента, имеющего потоковая модель свободно делать. Этот компонент находится в многопотоковом апартаменте (MTA). Как и в STA несколько экземпляров объекта COM может находиться в MTA. Однако агент передачи сообщений имеет несколько потоков, обслуживающих его экземпляров объекта COM. Таким образом Если блокировки вызывает данного экземпляра объекта COM, другие потоки могут обслуживать других экземпляров объекта COM. Эти потоки могут даже службы COM экземпляр объекта, который вызывает блокировки. Таким образом чтобы сделать компонентов, выполняющихся в поточно ориентированными агента передачи сообщений, следует защитить глобальных данных с объектами синхронизации.

Когда экземпляр объекта COM, от STA вызывает метод для экземпляра объекта COM, который находится в режиме MTA и в результате вызова блокировки, компонент STA не будет блокировать. Это обусловлено тем, что если компонент STA делает вызов через прокси-сервер COM, прокси-сервер отправляет отключение данных агента передачи сообщений и COM-направляет сообщения в STA таким образом, чтобы он может выполнять другую работу в его контейнере. (Работа в подразделении STA поступает через оконные сообщения). Другой поток в режиме MTA принимает вызов COM-заглушку и делает вызов для экземпляра объекта COM, который в свою очередь делает вызов блокировки, эффективного размещения потока в состоянии «Ожидание» метода. При возвращении блокирующих вызовов COM-метода завершает свою работу и возвращает данные заглушки, который возвращает данные для прокси-сервера через окна сообщения. Прокси-сервера в потоке STA собирают данные в окнах сообщений и отправляет его обратно в вызывающий компонент.

Другой побочным эффектом долго блокирующих вызовов в STA является то, что RPC обеспечивает связь с STA через оконные сообщения. Блокирующий вызов уменьшает такой обмен данными вместе с других потенциальных окна сообщения, может относиться к этому потоку.

Ссылки

Дополнительные сведения о COM потоков щелкните следующий номер статьи базы знаний Майкрософт:
136885ИНФОРМАЦИЯ: Потоков OLE необходимо отправить сообщения
Для получения дополнительных сведений об архитектуре Distributed COM (DCOM) обратитесь к следующей документации пакета разработки программного обеспечения (SDK) платформы Microsoft:
http://MSDN.Microsoft.com/en-us/library/ms809311.aspx

Свойства

Код статьи: 291837 - Последний отзыв: 21 ноября 2010 г. - Revision: 3.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft COM+ 2.0 Standard Edition
Ключевые слова: 
kbclientserver kbinfo kbinprocsvr kbthread kbmt KB291837 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:291837

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com