Partager via


Modèles de thread com+

Les modèles de thread com+ sont conçus autour d’une collection d’objets appelée appartement. Un appartement est une collection de contextes contenus dans un processus, comme illustré dans l’illustration suivante.

Diagramme montrant une collection de contextes dans une activité, au sein d’un appartement, au sein d’un processus.

Les appels au sein d’un appartement sont directs, tandis que les appels entre les appartements (hors processus) sont indirects et nécessitent du code proxy et stub. Les appartements autorisent les objets avec des propriétés de synchronisation et de réentrance différentes et ont deux catégories : monothread et multithread. Les objets d’un appartement à thread unique (STA) s’exécutent sur le thread particulier dans lequel ils ont été créés. Les STA n’autorisent qu’une seule méthode à s’exécuter à la fois. Ils sont conçus pour les interfaces utilisateur et s’appuient sur la file d’attente de messages Microsoft Windows pour traiter les appels entrants.

Les objets dans un appartement multithread (MTA) s’exécutent sur n’importe quel thread et autorisent un nombre quelconque de méthodes à se produire simultanément. Les MTA prennent en charge la réentrance implicitement.

Les classes COM+ sont marquées avec une propriété ThreadingModel qui permet à COM+ de créer l’objet dans l’appartement approprié. Pour déterminer l’appartement dans lequel un objet est créé, CoCreateInstance utilise la propriété ThreadingModel .

Les threads doivent appeler CoInitializeEx avant de pouvoir utiliser COM+. Cela les crée à l’intérieur de l’appartement et du contexte appropriés. L’appartement de thread main est déterminé comme étant le premier STA appelé par CoInitializeEx. Cela est généralement associé au thread main d’un processus. CoInitializeEx indique le type d’appartement requis par le thread en définissant les indicateurs suivants :

  • COINIT_MULTITHREADED : localise le thread dans l’appartement multithread unique.
  • COINIT_APARTMENTTHREADED : place le thread dans une nouvelle sta.

Les rubriques suivantes de cette section fournissent plus d’informations sur l’utilisation de modèles de thread et d’appartements dans COM+:

Processus, threads et appartements

ThreadingModel