Considérations relatives aux threads
L’enregistreur de composants en file d’attente COM+ peut s’exécuter dans l’appartement multithread (MTA) du processus ou dans un appartement à thread unique (STA). Lorsque l’enregistreur est exécuté dans le STA, COM+ exige que chaque appartement contenant des objets dispose d’une file d’attente Message Queuing pour gérer les appels d’autres processus et appartements au sein du même processus. Cela signifie que la fonction de travail du thread doit avoir une boucle de message. Lorsqu’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 afin que le thread de réception puisse annuler l’interface. Si ce n’est pas le cas, le thread de réception se bloque dans un appel à CoUnmarshalInterface.
Si vous utilisez des primitives pour synchroniser les threads, envisagez d’utiliser MsgWaitForMultipleObjects au lieu d’autres fonctions de synchronisation. Cela vérifie les messages dans la file d’attente ainsi que l’état de l’objet de synchronisation.