Partilhar via


Considerações sobre threading

O gravador de componentes em fila COM+ é capaz de ser executado no apartamento multithreaded (MTA) do processo ou em um apartamento single-threaded (STA). Quando o gravador é executado no STA, o COM+ requer que cada apartamento que contém objetos tenha uma fila de Enfileiramento de Mensagens para lidar com chamadas de outros processos e apartamentos dentro do mesmo processo. Isso significa que a função de trabalho do thread deve ter um loop de mensagem. Quando um componente em fila é instanciado, o ponteiro de interface retornado é sempre um ponteiro de interface proxy em vez de um ponteiro de interface direto. O ponteiro é, na verdade, uma referência a uma instância do gravador. Se essa referência de interface do gravador for passada para outro thread, o thread original ainda deverá estar executando o loop de mensagem do Windows para que o thread de recebimento possa desmarcar a interface. Se esse não for o caso, o thread de recebimento trava em uma chamada para CoUnmarshalInterface.

Se você estiver usando primitivas para sincronizar os threads, considere usar MsgWaitForMultipleObjects em vez de outras funções de sincronização. Isso verifica se há mensagens na fila, bem como o estado do objeto de sincronização.