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

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.

291837
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
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:

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 291837 - Última Revisão: 01/10/2015 13:01:57 - Revisão: 1.3

  • Microsoft COM+ 2.0 Standard Edition
  • kbnosurvey kbarchive kbmt kbclientserver kbinfo kbinprocsvr kbthread KB291837 KbMtpt
Esta informação foi útil?