Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le choix du modèle de thread pour un objet dépend de la fonction de l’objet. Un objet qui effectue de nombreuses opérations d’E/S peut prendre en charge le multithreading libre afin d’offrir une réactivité maximale aux clients en autorisant les appels d’interface durant les temps de latence des E/S. D'autre part, un objet qui interagit avec l'utilisateur peut prendre en charge le threading par cloisonnement pour synchroniser les appels COM entrants avec ses opérations de fenêtre.
Il est plus facile de prendre en charge le threading par cloisonnement dans les threads cloisonnés, car COM fournit une synchronisation par appel. La prise en charge du thread libre est plus difficile, car l’objet doit implémenter la synchronisation ; Toutefois, la réponse aux clients peut être meilleure, car la synchronisation peut être implémentée pour des sections de code plus petites.
Tip
Guide de décision rapide pour les clients COM :
// UI thread or main thread with a message loop → STA
HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
// Background/worker thread with no message loop → MTA
HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
Pour les serveurs COM (DLL in-process), définissez la ThreadingModel valeur de Registre sous la InprocServer32 clé :
-
Apartment— L’objet s’exécute dans le STA de l’appelant (le plus courant pour les objets liés à l’interface utilisateur) -
Free— L’objet s’exécute dans le MTA -
Both— L’objet s’exécute dans l’appartement de l’appelant (le mieux pour les objets à usage général) -
Neutral— L’objet s’exécute dans l’appartement neutre (COM+ uniquement)
Si vous ne savez pas, commencez par Both et vérifiez que votre objet est thread-safe. Cela réduit le marshaling entre appartements en permettant à COM de créer l’objet dans l’appartement de l’appelant, bien que le marshaling puisse toujours se produire lors de rappels entre appartements ou d’un accès depuis d’autres appartements.
Rubriques connexes