INFO: Não tornar bloquear chamadas de um componente STA

Traduções deste artigo Traduções deste artigo
ID do artigo: 291837 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

Quando você fazer uma chamada bloqueio de sua instância de objeto COM (Component Object Model) que é que em um single-threaded apartment (STA), todas as outras COM instâncias que residem nesse STA estão aguardando para sua instância desbloquear o compartimento. Se você precisar fazer uma chamada de bloqueio de um componente, é recomendável que você faça a chamada de bloqueio de um componente cujo modelo de threading está disponível.

Uma chamada é considerada o bloqueio se leva um longo ou indeterminado período de tempo para retornar, por exemplo chama a back-end, chamadas de rede que usam a chamada de procedimento remoto (RPC), ou soquetes.

Além disso, o Microsoft Visual Basic só pode criar aplicativos STA e componentes cujo modelo de threading é Apartment ou ausente. Portanto, você não deve fazer chamadas de bloqueio de um componente que está escrito em Visual Basic.

Mais Informações

Componentes cujo modelo de threading é Apartment moram em um single-threaded apartment (STA). Várias instâncias de objeto do COM podem residir em STA. mesmo No entanto, há apenas um thread (portanto, o nome) que todas as instâncias de objetos COM em que compartimento de serviços. Se você fizer uma chamada de bloqueio de uma dessas instâncias de objeto COM, outras instâncias de objeto de COM são sem porque o thread somente pode servem está bloqueado.

Você deve fazer chamadas de bloqueio de um componente que tem um modelo de threading de livre. Esse componente reside em multithreaded apartment (MTA). Como em STA, várias instâncias de objeto do COM podem residir em um MTA. No entanto, o MTA tem vários segmentos que suas instâncias de objeto COM do serviço. Como resultado, quando essa instância do objeto COM faz uma chamada de bloqueio, outros threads podem atender as outras instâncias do objeto COM. Esses segmentos podem até mesmo instância do objeto serviço COM que faz uma chamada de bloqueio. Portanto, para tornar os componentes que residem no MTA thread-safe, você deve proteger dados globais com objetos de sincronização.

Quando uma instância de objeto COM de uma STA chama um método em uma instância do objeto COM que reside no MTA e que faz uma chamada de bloqueio, o componente STA não irá bloquear. Isso ocorre porque quando o componente STA faz a chamada através do proxy COM, o proxy envia desativar os dados para o MTA e COM mensagens de bombas na STA para que ele possa fazer outro trabalho no seu apartamento. (Trabalho em um apartamento STA chega por meio de janelas de mensagens.) Um thread diferente no MTA pega a chamada COM por meio de stub e faz o chamada na instância do objeto COM, que por sua vez faz a chamada de bloqueio, colocar efetivamente o thread em um estado de "espera" de método. Quando a chamada de bloqueio retorna, o método COM termina seu trabalho e retorna os dados novamente para stub, que retorna dados para o proxy por meio de uma mensagem do windows. O proxy no thread STA pega os dados de mensagem windows e envia de volta para o componente de chamada.

Outro efeito colateral chamadas longo bloqueio em uma STA é RPC se comunica com STA por mensagens de janelas. A chamada de bloqueio impede que a comunicação com qualquer outra possíveis windows mensagem que pode pertencer a esse segmento.

Referências

Para informações adicionais sobre threading do COM, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
136885INFO: OLE segmentos devem enviar mensagens
Para obter mais informações sobre arquitetura de COM distribuído (DCOM), consulte a seguinte documentação do Microsoft Platform Software Development Kit (SDK):
http://msdn.microsoft.com/en-us/library/ms809311.aspx

Propriedades

ID do artigo: 291837 - Última revisão: quinta-feira, 12 de julho de 2001 - Revisão: 1.3
A informação contida neste artigo aplica-se a:
  • Microsoft COM+ 2.0 Standard Edition
Palavras-chave: 
kbmt kbclientserver kbinfo kbinprocsvr kbthread KB291837 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 291837

Submeter comentários

 

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