Considérations relatives aux threads
L’enregistreur de composants en file d’attente COM+ peut s’exécuter dans le cloisonnement multithread (MTA) du processus ou dans un thread cloisonné (STA). Lorsque l’enregistreur est exécuté dans le STA, COM+ requiert que chaque cloisonnement contenant des objets doive avoir une file d’attente Message Queuing pour gérer les appels d’autres processus et Apartments au sein du même processus. Cela signifie que la fonction de travail du thread doit avoir une boucle de message. Quand un composant mis en file d’attente est instancié, le pointeur d’interface retourné est toujours un pointeur d’interface proxy plutôt qu’un pointeur d’interface directe. Le pointeur est en fait une référence à une instance de l’enregistreur. Si cette référence d’interface d’enregistreur est passée à un autre thread, le thread d’origine doit toujours exécuter la boucle de message Windows pour que le thread de réception puisse démarshaler l’interface. Si ce n’est pas le cas, le thread de réception se bloque lors d’un appel à CoUnmarshalInterface.
Si vous utilisez des primitives pour synchroniser les threads, envisagez d’utiliser MsgWaitForMultipleObjects au lieu d’autres fonctions de synchronisation. Cela recherche les messages dans la file d’attente, ainsi que l’état de l’objet de synchronisation.