INFO : ne pas créer de blocage des appels à partir d'un composant STA

Traductions disponibles Traductions disponibles
Numéro d'article: 291837 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Résumé

Lorsque vous effectuez un appel bloquant à partir de votre instance d'objet (Component Object Model) qui vivant dans un single-threaded apartment (STA), toutes les autres instances de COM que STA qui attendent votre instance débloquer le compartiment de live. Si vous souhaitez effectuer un appel bloquant à partir d'un composant, il est recommandé d'effectuer l'appel bloquant à partir d'un composant dont modèle de thread est disponible.

Un appel est considéré comme blocage si elle prend un long ou indéterminé laps de temps pour renvoyer, par exemple appels à la principale, appels réseau qui utilisent l'appel de procédure distante (RPC) ou sockets.

En outre, Microsoft Visual Basic peut uniquement créer des applications STA et composants dont modèle de thread est compartiments ou manquant. Par conséquent, vous ne devez pas effectuer des appels blocage à partir d'un composant qui est écrit en Visual Basic.

Plus d'informations

Composants dont modèle de thread est compartiments direct dans un STA (single-threaded apartment. Plusieurs instances d'objet COM peuvent réside dans le même STA. Cependant, il y a un seul thread (d'où le nom) qui services toutes les instances objet COM dans ce cloisonné. Si vous effectuez un appel bloquant parmi les instances d'objet COM, les autres instances d'objet COM sont starved car le seul thread qui peut traiter les est bloqué.

Vous devez effectuer des appels blocage à partir d'un composant pour lequel un modèle de thread de les. Ce composant se trouve dans le (MTA) multithreaded apartment. Comme dans le STA, plusieurs instances d'objet COM peuvent direct en un agent de transfert des messages. Toutefois, l'Agent de transfert des messages a plusieurs threads ses instances d'objet COM de service. Par conséquent, lorsque cette instance d'objet COM effectue un appel bloquant, autres threads peuvent traiter les autres instances d'objet COM. Ces threads peut même service COM instance d'objet qui effectue un appel bloquant. Par conséquent, pour rendre vos composants en direct dans le thread MTA-safe, vous devez protéger les données globales avec des objets de synchronisation.

Lorsqu'une instance d'objet COM dans un STA appelle une méthode sur une instance d'objet COM qui se trouve dans l'agent de transfert des messages et qui effectue un appel bloquant, le composant STA ne bloque pas. Cela est dû au fait que lorsque le composant STA effectue l'appel par le proxy COM, le proxy envoie désactiver les données au MTA et COM pompe messages dans le STA afin que, il peut faire autre tâche dans le compartiment des. (Travail dans un STA cloisonné arrive par le biais de messages windows). Un thread différent de l'agent de transfert des messages prélève l'appel COM via le stub et rend la méthode à appeler sur l'instance d'objet COM, qui à son tour rend l'appel bloquant, plaçant efficacement le thread dans un état wait. Lorsque l'appel bloquant renvoie, la méthode COM termine son travail et renvoie les données vers le stub, qui renvoie des données au proxy via un message de windows. Le proxy dans le thread STA prélève les données dans le message de windows et l'envoie au composant appel.

Un autre effet de côté des appels longue blocage dans un STA est que RPC communique avec le STA par le biais de messages de fenêtres. L'appel bloquant diminue cette communication ainsi qu'avec n'importe quel autre message windows potentiel qui peut-être appartenir à ce thread.

Références

Pour plus d'informations sur COM threads, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
136885 INFO : threads OLE doivent diffusion des messages
Pour plus d'informations sur l'architecture de DCOM (Distributed COM), consultez la suivant Microsoft Platform Software Development Kit () documentation du Kit de développement :
http://msdn.microsoft.com/en-us/library/ms809311.aspx

Propriétés

Numéro d'article: 291837 - Dernière mise à jour: jeudi 12 juillet 2001 - Version: 1.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft COM+ 2.0 Standard Edition
Mots-clés : 
kbmt kbclientserver kbinfo kbinprocsvr kbthread KB291837 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 291837
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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