Condividi tramite


Classe CComAutoThreadModule

A partire da ATL 7.0, CComAutoThreadModule è obsoleto: vedere Classi di moduli ATL per altri dettagli.

Importante

Questa classe e i relativi membri non possono essere usati nelle applicazioni eseguite in Windows Runtime.

Sintassi

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

Parametri

ThreadAllocator
[in] Classe che gestisce la selezione del thread. Il valore predefinito è CComSimpleThreadAllocator.

Membri

Metodi

Funzione Descrizione
CreateInstance Seleziona un thread e quindi crea un oggetto nell'apartment associato.
GetDefaultThreads (Statico) Calcola dinamicamente il numero di thread per il modulo in base al numero di processori.
Init Crea i thread del modulo.
Blocca Incrementa il conteggio dei blocchi nel modulo e nel thread corrente.
Sbloccare Decrementa il conteggio dei blocchi nel modulo e nel thread corrente.

Membri dei dati

Membro dati Descrizione
dwThreadID Contiene l'identificatore del thread corrente.
m_Allocator Gestisce la selezione dei thread.
m_nThreads Contiene il numero di thread nel modulo.
m_pApartments Gestisce gli appartamenti del modulo.

Osservazioni:

Nota

Questa classe è obsoleta, essendo stata sostituita dalle classi derivate CAtlAutoThreadModule e CAtlModule . Le informazioni seguenti sono destinate all'uso con le versioni precedenti di ATL.

CComAutoThreadModule deriva da CComModule per implementare un server COM con pool di thread e apartment per i servizi EXEs e Windows. CComAutoThreadModule usa CComApartment per gestire un apartment per ogni thread nel modulo.

Derivare il modulo da CComAutoThreadModule quando si desidera creare oggetti in più appartamenti. È inoltre necessario includere la macro DECLARE_CLASSFACTORY_AUTO_THREAD nella definizione della classe dell'oggetto per specificare CComClassFactoryAutoThread come class factory.

Per impostazione predefinita, atl COM AppWizard (creazione guidata progetto ATL in Visual Studio .NET) deriva il modulo da CComModule. Per usare CComAutoThreadModule, modificare la definizione della classe. Ad esempio:

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;
};

Gerarchia di ereditarietà

_ATL_MODULE

CAtlModule

IAtlAutoThreadModule

CAtlModuleT

CAtlAutoThreadModuleT

Ccommodule

CComAutoThreadModule

Requisiti

Intestazione: atlbase.h

CComAutoThreadModule::CreateInstance

A partire da ATL 7.0, CComAutoThreadModule è obsoleto: vedere Classi di moduli ATL per altri dettagli.

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

Parametri

pfnCreateInstance
[in] Puntatore a una funzione creator.

riid
[in] IID dell'interfaccia richiesta.

ppvObj
[out] Puntatore al puntatore all'interfaccia identificato da riid. Se l'oggetto non supporta questa interfaccia, ppvObj è impostato su NULL.

Valore restituito

Valore HRESULT standard.

Osservazioni:

Seleziona un thread e quindi crea un oggetto nell'apartment associato.

CComAutoThreadModule::d wThreadID

A partire da ATL 7.0, CComAutoThreadModule è obsoleto: vedere Classi di moduli ATL per altri dettagli.

DWORD dwThreadID;

Osservazioni:

Contiene l'identificatore del thread corrente.

CComAutoThreadModule::GetDefaultThreads

A partire da ATL 7.0, CComAutoThreadModule è obsoleto: vedere Classi di moduli ATL per altri dettagli.

static int GetDefaultThreads();

Valore restituito

Numero di thread da creare nel modulo EXE.

Osservazioni:

Questa funzione statica calcola in modo dinamico il numero massimo di thread per il modulo EXE, in base al numero di processori. Per impostazione predefinita, questo valore restituito viene passato al metodo Init per creare i thread.

CComAutoThreadModule::Init

A partire da ATL 7.0, CComAutoThreadModule è obsoleto: vedere Classi di moduli ATL per altri dettagli.

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

Parametri

p
[in] Puntatore a una matrice di voci della mappa di oggetti.

h
[in] HINSTANCE passata a DLLMain o WinMain.

plibid
[in] Puntatore al LIBID della libreria dei tipi associata al progetto.

nThreads
[in] Numero di thread da creare. Per impostazione predefinita, nThreads è il valore restituito da GetDefaultThreads.

Osservazioni:

Inizializza i membri dati e crea il numero di thread specificati da nThreads.

CComAutoThreadModule::Lock

A partire da ATL 7.0, CComAutoThreadModule è obsoleto: vedere Classi di moduli ATL per altri dettagli.

LONG Lock();

Valore restituito

Valore che può essere utile per la diagnostica o il test.

Osservazioni:

Esegue un incremento atomico sul conteggio dei blocchi per il modulo e per il thread corrente. CComAutoThreadModule usa il conteggio dei blocchi del modulo per determinare se i client accedono al modulo. Il conteggio dei blocchi nel thread corrente viene utilizzato per scopi statistici.

CComAutoThreadModule::m_Allocator

A partire da ATL 7.0, CComAutoThreadModule è obsoleto: vedere Classi di moduli ATL per altri dettagli.

ThreadAllocator  m_Allocator;

Osservazioni:

Oggetto che gestisce la selezione del thread. Per impostazione predefinita, il parametro del ThreadAllocator modello di classe è CComSimpleThreadAllocator.

CComAutoThreadModule::m_nThreads

A partire da ATL 7.0, CComAutoThreadModule è obsoleto: vedere Classi di moduli ATL per altri dettagli.

int m_nThreads;

Osservazioni:

Contiene il numero di thread nel modulo EXE. Quando viene chiamato Init , m_nThreads viene impostato sul valore del parametro nThreads . L'apartment associato a ogni thread viene gestito da un oggetto CComApartment .

CComAutoThreadModule::m_pApartments

A partire da ATL 7.0, CComAutoThreadModule è obsoleto: vedere Classi di moduli ATL per altri dettagli.

CComApartment* m_pApartments;

Osservazioni:

Punta a una matrice di oggetti CComApartment , ognuno dei quali gestisce un apartment nel modulo. Il numero di elementi nella matrice si basa sul membro m_nThreads .

CComAutoThreadModule::Unlock

A partire da ATL 7.0, CComAutoThreadModule è obsoleto: vedere Classi di moduli ATL per altri dettagli.

LONG Unlock();

Valore restituito

Valore che può essere utile per la diagnostica o il test.

Osservazioni:

Esegue un decremento atomico sul conteggio dei blocchi per il modulo e per il thread corrente. CComAutoThreadModule usa il conteggio dei blocchi del modulo per determinare se i client accedono al modulo. Il conteggio dei blocchi nel thread corrente viene utilizzato per scopi statistici.

Quando il numero di blocchi del modulo raggiunge zero, il modulo può essere scaricato.

Vedi anche

Cenni preliminari sulla classe
Classi del modulo