Класс 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;
};

Иерархия наследования

_ATL_MODULE

CAtlModule

IAtlAutoThreadModule

CAtlModuleT

CAtlAutoThreadModuleT

Ccommodule

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 использует счетчик блокировки модуля, чтобы определить, обращаются ли клиенты к модулю. Число блокировок текущего потока используется для статистических целей.

Когда число блокировок модуля достигает нуля, модуль можно выгрузить.

См. также

Общие сведения о классе
Классы модулей