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. |
Aprire | 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à
IAtlAutoThreadModule
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.