Класс CComAutoThreadModule
По состоянию на ATL 7.0 устарело: CComAutoThreadModule
дополнительные сведения см. в разделе "Классы модулей ATL".
Внимание
Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.
Синтаксис
template <class ThreadAllocator = CComSimpleThreadAllocator>
class CComAutoThreadModule : public CComModule
Параметры
ThreadAllocator
[in] Класс управляет выделением потоков. Значение по умолчанию — CComSimpleThreadAllocator.
Участники
Методы
Function | Description |
---|---|
CreateInstance | Выбирает поток, а затем создает объект в связанной квартире. |
GetDefaultThreads | (статический) Динамически вычисляет количество потоков для модуля на основе количества процессоров. |
Init | Создает потоки модуля. |
Заблокировать | Увеличивает число блокировок модуля и текущего потока. |
Отпирать | Уменьшает количество блокировок модуля и текущего потока. |
Элементы данных
Элемент данных | Description |
---|---|
dwThreadID | Содержит идентификатор текущего потока. |
m_Allocator | Управляет выбором потока. |
m_nThreads | Содержит количество потоков в модуле. |
m_pApartments | Управляет квартирами модуля. |
Замечания
Примечание.
Этот класс устарел, заменяясь производными классами CAtlAutoThreadModule и CAtlModule. Приведенные ниже сведения используются для более ранних выпусков ATL.
CComAutoThreadModule
является производным от CComModule для реализации пула потоков, com-сервера модели квартиры для EXEs и служб Windows. CComAutoThreadModule
использует CComApartment для управления квартирой для каждого потока в модуле.
Наследуйте модуль, когда CComAutoThreadModule
требуется создать объекты в нескольких квартирах. Кроме того, необходимо включить макрос DECLARE_CLASSFACTORY_AUTO_THREAD в определение класса объекта, чтобы указать CComClassFactoryAutoThread в качестве фабрики классов.
По умолчанию COM-приложение ATL AppWizard (мастер проектов ATL в Visual Studio .NET) будет производным от модуля CComModule
. Чтобы использовать CComAutoThreadModule
, измените определение класса. Например:
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;
};
Иерархия наследования
IAtlAutoThreadModule
CComAutoThreadModule
Требования
Заголовок: atlbase.h
CComAutoThreadModule::CreateInstance
По состоянию на ATL 7.0 устарело: CComAutoThreadModule
дополнительные сведения см. в разделе "Классы модулей ATL".
HRESULT CreateInstance(
void* pfnCreateInstance,
REFIID riid,
void** ppvObj);
Параметры
pfnCreateInstance
[in] Указатель на функцию создателя.
riid
[in] IID запрошенного интерфейса.
ppvObj
[out] Указатель на указатель интерфейса, определяемый идентификатором riid. Если объект не поддерживает этот интерфейс, ppvObj имеет значение NULL.
Возвращаемое значение
Стандартное значение HRESULT.
Замечания
Выбирает поток, а затем создает объект в связанной квартире.
CComAutoThreadModule::d wThreadID
По состоянию на ATL 7.0 устарело: CComAutoThreadModule
дополнительные сведения см. в разделе "Классы модулей ATL".
DWORD dwThreadID;
Замечания
Содержит идентификатор текущего потока.
CComAutoThreadModule::GetDefaultThreadThreads
По состоянию на ATL 7.0 устарело: CComAutoThreadModule
дополнительные сведения см. в разделе "Классы модулей ATL".
static int GetDefaultThreads();
Возвращаемое значение
Количество потоков, создаваемых в модуле EXE.
Замечания
Эта статическую функцию динамически вычисляет максимальное количество потоков для модуля EXE на основе числа процессоров. По умолчанию это возвращаемое значение передается методу Init для создания потоков.
CComAutoThreadModule::Init
По состоянию на ATL 7.0 устарело: CComAutoThreadModule
дополнительные сведения см. в разделе "Классы модулей ATL".
HRESULT Init(
_ATL_OBJMAP_ENTRY* p,
HINSTANCE h,
const GUID* plibid = NULL,
int nThreads = GetDefaultThreads());
Параметры
p
[in] Указатель на массив записей карты объектов.
ч
[in] HINSTANCE, переданный DLLMain
или WinMain
.
plibid
[in] Указатель на LIBID библиотеки типов, связанной с проектом.
nThreads
[in] Количество создаваемых потоков. По умолчанию nThreads — это значение, возвращаемое GetDefaultThreads.
Замечания
Инициализирует элементы данных и создает количество потоков, указанных nThreads.
CComAutoThreadModule::Lock
По состоянию на ATL 7.0 устарело: CComAutoThreadModule
дополнительные сведения см. в разделе "Классы модулей ATL".
LONG Lock();
Возвращаемое значение
Значение, которое может быть полезно для диагностика или тестирования.
Замечания
Выполняет атомарное увеличение количества блокировок для модуля и текущего потока. CComAutoThreadModule
использует счетчик блокировки модуля, чтобы определить, обращаются ли клиенты к модулю. Число блокировок текущего потока используется для статистических целей.
CComAutoThreadModule::m_Allocator
По состоянию на ATL 7.0 устарело: CComAutoThreadModule
дополнительные сведения см. в разделе "Классы модулей ATL".
ThreadAllocator m_Allocator;
Замечания
Объект, управляя выделением потоков. По умолчанию ThreadAllocator
параметр шаблона класса — CComSimpleThreadAllocator.
CComAutoThreadModule::m_nThreads
По состоянию на ATL 7.0 устарело: CComAutoThreadModule
дополнительные сведения см. в разделе "Классы модулей ATL".
int m_nThreads;
Замечания
Содержит количество потоков в модуле EXE. При вызове m_nThreads
Init задается значение параметра nThreads. Связанная с каждым потоком квартира управляется объектом CComApartment .
CComAutoThreadModule::m_pApartments
По состоянию на ATL 7.0 устарело: CComAutoThreadModule
дополнительные сведения см. в разделе "Классы модулей ATL".
CComApartment* m_pApartments;
Замечания
Указывает на массив объектов CComApartment , каждый из которых управляет квартирой в модуле. Количество элементов в массиве основано на элементе m_nThreads .
CComAutoThreadModule::Unlock
По состоянию на ATL 7.0 устарело: CComAutoThreadModule
дополнительные сведения см. в разделе "Классы модулей ATL".
LONG Unlock();
Возвращаемое значение
Значение, которое может быть полезно для диагностика или тестирования.
Замечания
Выполняет атомарное уменьшение количества блокировок для модуля и текущего потока. CComAutoThreadModule
использует счетчик блокировки модуля, чтобы определить, обращаются ли клиенты к модулю. Число блокировок текущего потока используется для статистических целей.
Когда число блокировок модуля достигает нуля, модуль можно выгрузить.