J'essaie de créer un composant COM, où il sera appelé fréquemment par une application Excel (excel chargera le COM lors de son initialisation) et un autre processus (disons procA) envoie également (avec haute fréquence) des messages Windows à ce composant. Actuellement, j'ai implémenté COM en tant que STA, cependant, j'ai expérimenté que COM est occupé à traiter les messages de procA, l'interface utilisateur d'Excel se coince.Quel modèle utiliser STA/MTA
S'il vous plaît, aidez-moi à contourner ce problème. Puis-je simplement créer un thread de fenêtre simple pour traiter les messages de procA tout en gardant COM comme modèle STA? Ou dois-je faire COM en tant que modèle MTA, si oui, veuillez expliquer comment le gérer.
Merci Vous
Merci pour votre explication, Si je me trompe, vous me dites que je dois utiliser MTA pour répondre à mes exigences et le modèle neuronal serait un meilleur choix. Corrigez-moi si j'ai tort, s'il-vous plait. Je ne suis pas familier avec la création de threads à l'intérieur de COM, est-ce juste un thread Windows que nous utilisons dans l'application C++? S'il vous plaît expliquer ou me donner une référence. Mon plan consiste à créer deux threads T1, T2. T1 traitera les messages de procA et mettra à jour un objet global. Et T2 accédera également à cet objet global en tant que requête Excel pour mettre à jour les valeurs. Donc, l'objet global doit être verrouillé. Est-ce que ce modèle va bien? – Nimo
@Nimo: Oui: si vous pensiez à enfiler le modèle de "Free", alors "Neutral" est presque toujours une meilleure option. Généralement, les composants ne créent pas eux-mêmes de threads (les clients ou le runtime COM le font). Si vous avez besoin d'un thread de travail, vous devez vous assurer de le gérer entièrement, non seulement pour l'initialiser pour COM, mais aussi pour tous les problèmes typiques d'une librairie tournant un thread (par exemple gérer COM décharger votre dll). – Richard