Klasa CComAutoThreadModule
Od wersji ATL 7.0 jest CComAutoThreadModule
przestarzałe: zobacz Klasy modułów ATL, aby uzyskać więcej szczegółów.
Ważne
Tej klasy i jej składowych nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows.
Składnia
template <class ThreadAllocator = CComSimpleThreadAllocator>
class CComAutoThreadModule : public CComModule
Parametry
ThreadAllocator
[in] Klasa zarządzająca wyborem wątków. Wartość domyślna to CComSimpleThreadAllocator.
Elementy członkowskie
Metody
Function | opis |
---|---|
CreateInstance | Wybiera wątek, a następnie tworzy obiekt w skojarzonym mieszkaniu. |
GetDefaultThreads | (Statyczne) Dynamicznie oblicza liczbę wątków dla modułu na podstawie liczby procesorów. |
Inicjowanie | Tworzy wątki modułu. |
Zablokuj | Zwiększa liczbę blokad modułu i bieżącego wątku. |
Odblokować | Dekrementuje liczbę blokad w module i w bieżącym wątku. |
Składowe danych
Element członkowski danych | opis |
---|---|
dwThreadID | Zawiera identyfikator bieżącego wątku. |
m_Allocator | Zarządza wyborem wątków. |
m_nThreads | Zawiera liczbę wątków w module. |
m_pApartments | Zarządza apartamentami modułu. |
Uwagi
Uwaga
Ta klasa jest przestarzała i została zastąpiona przez klasy pochodne CAtlAutoThreadModule i CAtlModule . Poniższe informacje służą do używania ze starszymi wersjami usługi ATL.
CComAutoThreadModule
program pochodzi z CComModule , aby zaimplementować serwer COM typu thread-pooled, apartment-model dla usług EXEs i Windows. CComAutoThreadModule
Używa CComApartment do zarządzania mieszkaniem dla każdego wątku w module.
Utwórz moduł na podstawie CComAutoThreadModule
tego, kiedy chcesz utworzyć obiekty w wielu mieszkaniach. Musisz również uwzględnić makro DECLARE_CLASSFACTORY_AUTO_THREAD w definicji klasy obiektu, aby określić CComClassFactoryAutoThread jako fabrykę klas.
Domyślnie aplikacja APPWizard COM ATL (Kreator projektu ATL w programie Visual Studio .NET) będzie pochodzić z modułu .CComModule
Aby użyć metody CComAutoThreadModule
, zmodyfikuj definicję klasy. Na przykład:
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;
};
Hierarchia dziedziczenia
IAtlAutoThreadModule
CComAutoThreadModule
Wymagania
Nagłówek: atlbase.h
CComAutoThreadModule::CreateInstance
Od wersji ATL 7.0 jest CComAutoThreadModule
przestarzałe: zobacz Klasy modułów ATL, aby uzyskać więcej szczegółów.
HRESULT CreateInstance(
void* pfnCreateInstance,
REFIID riid,
void** ppvObj);
Parametry
pfnCreateInstance
[in] Wskaźnik do funkcji twórcy.
riid
[in] Identyfikator IID żądanego interfejsu.
ppvObj
[out] Wskaźnik do wskaźnika interfejsu zidentyfikowany przez riid. Jeśli obiekt nie obsługuje tego interfejsu, parametr ppvObj ma wartość NULL.
Wartość zwracana
Standardowa wartość HRESULT.
Uwagi
Wybiera wątek, a następnie tworzy obiekt w skojarzonym mieszkaniu.
CComAutoThreadModule::d wThreadID
Od wersji ATL 7.0 jest CComAutoThreadModule
przestarzałe: zobacz Klasy modułów ATL, aby uzyskać więcej szczegółów.
DWORD dwThreadID;
Uwagi
Zawiera identyfikator bieżącego wątku.
CComAutoThreadModule::GetDefaultThreads
Od wersji ATL 7.0 jest CComAutoThreadModule
przestarzałe: zobacz Klasy modułów ATL, aby uzyskać więcej szczegółów.
static int GetDefaultThreads();
Wartość zwracana
Liczba wątków do utworzenia w module EXE.
Uwagi
Ta funkcja statyczna dynamicznie oblicza maksymalną liczbę wątków dla modułu EXE na podstawie liczby procesorów. Domyślnie ta wartość zwracana jest przekazywana do metody Init w celu utworzenia wątków.
CComAutoThreadModule::Init
Od wersji ATL 7.0 jest CComAutoThreadModule
przestarzałe: zobacz Klasy modułów ATL, aby uzyskać więcej szczegółów.
HRESULT Init(
_ATL_OBJMAP_ENTRY* p,
HINSTANCE h,
const GUID* plibid = NULL,
int nThreads = GetDefaultThreads());
Parametry
p
[in] Wskaźnik do tablicy wpisów mapy obiektów.
h
[in] Funkcja HINSTANCE przekazana do DLLMain
lub WinMain
.
plibid
[in] Wskaźnik do LIBID biblioteki typów skojarzonej z projektem.
nWątki
[in] Liczba wątków do utworzenia. Domyślnie nThreads to wartość zwracana przez element GetDefaultThreads.
Uwagi
Inicjuje składowe danych i tworzy liczbę wątków określonych przez nThreads.
CComAutoThreadModule::Lock
Od wersji ATL 7.0 jest CComAutoThreadModule
przestarzałe: zobacz Klasy modułów ATL, aby uzyskać więcej szczegółów.
LONG Lock();
Wartość zwracana
Wartość, która może być przydatna do diagnostyki lub testowania.
Uwagi
Wykonuje niepodzielne przyrosty liczby blokad dla modułu i dla bieżącego wątku. CComAutoThreadModule
używa liczby blokad modułów, aby określić, czy wszyscy klienci uzyskują dostęp do modułu. Liczba blokad w bieżącym wątku jest używana do celów statystycznych.
CComAutoThreadModule::m_Allocator
Od wersji ATL 7.0 jest CComAutoThreadModule
przestarzałe: zobacz Klasy modułów ATL, aby uzyskać więcej szczegółów.
ThreadAllocator m_Allocator;
Uwagi
Obiekt zarządzający wyborem wątku. Domyślnie ThreadAllocator
parametr szablonu klasy to CComSimpleThreadAllocator.
CComAutoThreadModule::m_nThreads
Od wersji ATL 7.0 jest CComAutoThreadModule
przestarzałe: zobacz Klasy modułów ATL, aby uzyskać więcej szczegółów.
int m_nThreads;
Uwagi
Zawiera liczbę wątków w module EXE. Gdy wywołana jest funkcja Init , m_nThreads
jest ustawiona na wartość parametru nThreads . Skojarzone z każdym wątkiem mieszkanie jest zarządzane przez obiekt CComApartment .
CComAutoThreadModule::m_pApartments
Od wersji ATL 7.0 jest CComAutoThreadModule
przestarzałe: zobacz Klasy modułów ATL, aby uzyskać więcej szczegółów.
CComApartment* m_pApartments;
Uwagi
Wskazuje tablicę obiektów CComApartment , z których każdy zarządza mieszkaniem w module. Liczba elementów w tablicy jest oparta na m_nThreads składowej.
CComAutoThreadModule::Unlock
Od wersji ATL 7.0 jest CComAutoThreadModule
przestarzałe: zobacz Klasy modułów ATL, aby uzyskać więcej szczegółów.
LONG Unlock();
Wartość zwracana
Wartość, która może być przydatna do diagnostyki lub testowania.
Uwagi
Wykonuje niepodzielne dekrementację liczby blokad dla modułu i dla bieżącego wątku. CComAutoThreadModule
używa liczby blokad modułów, aby określić, czy wszyscy klienci uzyskują dostęp do modułu. Liczba blokad w bieżącym wątku jest używana do celów statystycznych.
Gdy liczba blokad modułu osiągnie zero, moduł może zostać zwolniony.