INFO: Não criar bloquear chamadas a partir de um componente STA

Traduções de Artigos Traduções de Artigos
Artigo: 291837 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sumário

Quando efectua uma chamada de bloqueio da instância de objecto COM (Component Object Model) que está a levar num single-threaded apartment (STA), todas as outras instâncias COM live que aguardam STA para a instância desbloquear o apartamento. Se necessitar de efectuar uma chamada de bloqueio de um componente, recomenda-se que efectuar a chamada bloqueio de um componente cujo modelo de threading está disponível.

Uma chamada é considerada se demorar um período longo ou indeterminado de tempo para devolver o bloqueio, por exemplo chamadas para o back-end, as ligações de rede que utilizam a chamada de procedimento remoto (RPC), ou sockets.

Além disso, o Microsoft Visual Basic só pode criar aplicações de STA e componentes cujo modelo de thread é Apartment ou em falta. Assim, não deve efectuar chamadas de bloqueios de um componente que é escrito no Visual Basic.

Mais Informação

Componentes é de cujo modelo de thread Apartment em directo num único-threaded apartment (STA). Várias instâncias de objecto do COM podem permanecer na STA. mesmo No entanto, existe apenas um thread (assim, o nome) que serviços todas as ocorrências de objectos COM em que apartment. Se fizer uma chamada de bloqueio de uma às instâncias do objecto COM, as outras instâncias de objectos COM são starved porque o thread único que pode servi-los está bloqueado.

Deve efectuar chamadas de bloqueios de um componente que tenha um modelo de encadeamento de disponível. Este componente reside no multithread apartment (MTA). Como em STA, várias instâncias de objecto do COM podem reside num MTA. No entanto, o MTA tem vários threads respectivas instâncias de objecto COM de serviço. Como resultado, quando esta instância do objeto COM efectua uma chamada de bloqueio, outros threads podem servir de outras instâncias de objeto COM. Estes threads podem mesmo serviço COM a ocorrência de objecto que efectua uma chamada de bloqueio. Assim, para que os componentes de no thread de segurança MTA, deverá proteger dados globais com objectos de sincronização.

Quando uma instância de objecto COM de uma STA chama um método numa instância de objecto COM que se encontra no MTA e que efectua uma chamada de bloqueio, não vai bloquear o componente STA. Isto deve-se ao facto de quando o componente STA efectua a chamada através do proxy COM, o proxy envia os dados para o MTA e COM bombas mensagens na STA poder fazer qualquer outro trabalho no respectivo compartimento. (Trabalho de um apartamento STA chega através de mensagens do windows.) Um thread diferente no MTA recebe a chamada COM através de stub e faz com que o método chamar na instância do objecto COM, que por sua vez efectua a chamada de bloqueio, eficazmente colocando o thread de um estado de "espera". Quando devolve a chamada de bloqueio, o método COM termina o trabalho e devolve os dados novamente ao stub, que devolve dados para o proxy através de uma mensagem do windows. O proxy num thread STA recolhe os dados na mensagem de janelas e envia-o novamente para o componente de chamada.

Outro efeito secundário de bloqueio de longo chamadas num STA é que o RPC comunica com STA através de mensagens do windows. A chamada de bloqueio impede que a comunicação juntamente com quaisquer outra potenciais janelas mensagem pertencentes a esse thread poderá.

Referências

Para informações adicionais no COM módulos, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
136885INFO: OLE threads tem de despacho mensagens
Para mais informações sobre a arquitectura de DCOM (Distributed COM), consulte a documentação Microsoft Platform Software Development Kit (SDK) seguintes:
http://msdn.microsoft.com/en-us/library/ms809311.aspx

Propriedades

Artigo: 291837 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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