CComAutoThreadModule, classe

À partir d’ATL 7.0, CComAutoThreadModule est obsolète : consultez les classes de module ATL pour plus d’informations.

Important

Cette classe et ses membres ne peuvent pas être utilisés dans les applications qui s’exécutent dans Windows Runtime.

Syntaxe

template <class ThreadAllocator = CComSimpleThreadAllocator>
class CComAutoThreadModule : public CComModule

Paramètres

ThreadAllocator
[in] Classe gérant la sélection de threads. La valeur par défaut est CComSimpleThreadAllocator.

Membres

Méthodes

Fonction Description
CreateInstance Sélectionne un thread, puis crée un objet dans l’appartement associé.
GetDefaultThreads (Statique) Calcule dynamiquement le nombre de threads pour le module en fonction du nombre de processeurs.
Init Crée les threads du module.
Verrouiller Incrémente le nombre de verrous sur le module et sur le thread actuel.
Déverrouiller Décrémente le nombre de verrous sur le module et sur le thread actuel.

Données membres

Membre de données Description
dwThreadID Contient l’identificateur du thread actuel.
m_Allocator Gère la sélection de threads.
m_nThreads Contient le nombre de threads dans le module.
m_pApartments Gère les appartements du module.

Notes

Remarque

Cette classe est obsolète, ayant été remplacée par les classes dérivées CAtlAutoThreadModule et CAtlModule . Les informations suivantes sont utilisées avec les versions antérieures d’ATL.

CComAutoThreadModule dérive de CComModule pour implémenter un serveur COM de modèle d’appartement et de thread mis en pool pour les services EXEs et Windows. CComAutoThreadModule utilise CComApartment pour gérer un appartement pour chaque thread du module.

Dérivez votre module à partir du CComAutoThreadModule moment où vous souhaitez créer des objets dans plusieurs appartements. Vous devez également inclure la macro DECLARE_CLASSFACTORY_AUTO_THREAD dans la définition de classe de votre objet pour spécifier CComClassFactoryAutoThread comme fabrique de classes.

Par défaut, l’AppWizard COM ATL (l’Assistant Projet ATL dans Visual Studio .NET) dérive votre module de CComModule. Pour utiliser CComAutoThreadModule, modifiez la définition de classe. Par exemple :

class CMyModule : 
public CComAutoThreadModule<CComSimpleThreadAllocator>
{
public:
   LONG Unlock()
   {
      LONG l = CComAutoThreadModule<CComSimpleThreadAllocator>::Unlock();
      if (l == 0)
         PostThreadMessage(dwThreadID, WM_QUIT, 0, 0);
      return l;
   }

   DWORD dwThreadID;
};

Hiérarchie d'héritage

_ATL_MODULE

CAtlModule

IAtlAutoThreadModule

CAtlModuleT

CAtlAutoThreadModuleT

CComModule

CComAutoThreadModule

Spécifications

En-tête : atlbase.h

CComAutoThreadModule ::CreateInstance

À partir d’ATL 7.0, CComAutoThreadModule est obsolète : consultez les classes de module ATL pour plus d’informations.

HRESULT CreateInstance(
    void* pfnCreateInstance,
    REFIID riid,
    void** ppvObj);

Paramètres

pfnCreateInstance
[in] Pointeur vers une fonction de créateur.

riid
[in] IID de l’interface demandée.

ppvObj
[out] Pointeur vers le pointeur d’interface identifié par riid. Si l’objet ne prend pas en charge cette interface, ppvObj a la valeur NULL.

Valeur de retour

Valeur HRESULT standard.

Notes

Sélectionne un thread, puis crée un objet dans l’appartement associé.

CComAutoThreadModule ::d wThreadID

À partir d’ATL 7.0, CComAutoThreadModule est obsolète : consultez les classes de module ATL pour plus d’informations.

DWORD dwThreadID;

Notes

Contient l’identificateur du thread actuel.

CComAutoThreadModule ::GetDefaultThreads

À partir d’ATL 7.0, CComAutoThreadModule est obsolète : consultez les classes de module ATL pour plus d’informations.

static int GetDefaultThreads();

Valeur de retour

Nombre de threads à créer dans le module EXE.

Notes

Cette fonction statique calcule dynamiquement le nombre maximal de threads pour le module EXE, en fonction du nombre de processeurs. Par défaut, cette valeur de retour est passée à la méthode Init pour créer les threads.

CComAutoThreadModule ::Init

À partir d’ATL 7.0, CComAutoThreadModule est obsolète : consultez les classes de module ATL pour plus d’informations.

HRESULT Init(
    _ATL_OBJMAP_ENTRY* p,
    HINSTANCE h,
    const GUID* plibid = NULL,
    int nThreads = GetDefaultThreads());

Paramètres

p
[in] Pointeur vers un tableau d’entrées de mappage d’objets.

h
[in] L’HINSTANCE est passée à DLLMain ou WinMain.

plibid
[in] Pointeur vers le LIBID de la bibliothèque de types associée au projet.

nThreads
[in] Nombre de threads à créer. Par défaut, nThreads est la valeur retournée par GetDefaultThreads.

Notes

Initialise les membres de données et crée le nombre de threads spécifiés par nThreads.

CComAutoThreadModule ::Lock

À partir d’ATL 7.0, CComAutoThreadModule est obsolète : consultez les classes de module ATL pour plus d’informations.

LONG Lock();

Valeur de retour

Valeur qui peut être utile pour les diagnostics ou les tests.

Notes

Effectue un incrément atomique sur le nombre de verrous pour le module et pour le thread actuel. CComAutoThreadModule utilise le nombre de verrous de module pour déterminer si les clients accèdent au module. Le nombre de verrous sur le thread actuel est utilisé à des fins statistiques.

CComAutoThreadModule ::m_Allocator

À partir d’ATL 7.0, CComAutoThreadModule est obsolète : consultez les classes de module ATL pour plus d’informations.

ThreadAllocator  m_Allocator;

Notes

Objet gérant la sélection de threads. Par défaut, le paramètre de ThreadAllocator modèle de classe est CComSimpleThreadAllocator.

CComAutoThreadModule ::m_nThreads

À partir d’ATL 7.0, CComAutoThreadModule est obsolète : consultez les classes de module ATL pour plus d’informations.

int m_nThreads;

Notes

Contient le nombre de threads dans le module EXE. Quand Init est appelé, m_nThreads est défini sur la valeur du paramètre nThreads . L’appartement associé de chaque thread est géré par un objet CComApartment .

CComAutoThreadModule ::m_pApartments

À partir d’ATL 7.0, CComAutoThreadModule est obsolète : consultez les classes de module ATL pour plus d’informations.

CComApartment* m_pApartments;

Notes

Pointe vers un tableau d’objets CComApartment , chacun d’entre eux gère un appartement dans le module. Le nombre d’éléments du tableau est basé sur le membre m_nThreads .

CComAutoThreadModule ::Unlock

À partir d’ATL 7.0, CComAutoThreadModule est obsolète : consultez les classes de module ATL pour plus d’informations.

LONG Unlock();

Valeur de retour

Valeur qui peut être utile pour les diagnostics ou les tests.

Notes

Effectue une décrémentation atomique sur le nombre de verrous pour le module et pour le thread actuel. CComAutoThreadModule utilise le nombre de verrous de module pour déterminer si les clients accèdent au module. Le nombre de verrous sur le thread actuel est utilisé à des fins statistiques.

Lorsque le nombre de verrous de module atteint zéro, le module peut être déchargé.

Voir aussi

Vue d’ensemble de la classe
Module Classes