CComAutoThreadModule 类

从 ATL 7.0 开始,CComAutoThreadModule 已过时:有关更多详细信息,请参阅 ATL 模块类

重要

无法在 Windows 运行时中执行的应用程序中使用此类及其成员。

语法

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

参数

ThreadAllocator
[in] 管理线程选择的类。 默认值为 CComSimpleThreadAllocator

成员

方法

函数 说明
CreateInstance 选择一个线程,然后在关联的单元中创建一个对象。
GetDefaultThreads (静态)根据处理器数动态计算模块的线程数。
Init 创建模块的线程。
锁定 递增模块和当前线程上的锁计数。
Unlock 递减模块和当前线程上的锁计数。

数据成员

数据成员 说明
dwThreadID 包含当前线程的标识符。
m_Allocator 管理线程选择。
m_nThreads 包含模块中的线程数。
m_pApartments 管理模块的单元。

备注

注意

此类已过时,已由 CAtlAutoThreadModuleCAtlModule 派生类替换。 以下信息适用于较旧 ATL 版本。

CComAutoThreadModule 派生自 CComModule,以实现适用于 EXE 和 Windows 服务的线程共用单元模型 COM 服务器。 CComAutoThreadModule 使用 CComApartment 来管理模块中每个线程的单元。

要在多个单元中创建对象时,请从 CComAutoThreadModule 派生模块。 还必须在对象类定义中包含 DECLARE_CLASSFACTORY_AUTO_THREAD 宏,将 CComClassFactoryAutoThread 指定为类工厂。

默认情况下,ATL COM AppWizard(Visual Studio .NET 中的 ATL 项目向导)将从 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::dwThreadID

从 ATL 7.0 开始,CComAutoThreadModule 已过时:有关更多详细信息,请参阅 ATL 模块类

DWORD dwThreadID;

备注

包含当前线程的标识符。

CComAutoThreadModule::GetDefaultThreads

从 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] 指向对象映射条目数组的指针。

h
[in] 传递给 DLLMainWinMain 的 HINSTANCE。

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 模块中的线程数。 调用 Init 时,m_nThreads 将设置为 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 使用模块锁计数来确定是否有客户端正在访问该模块。 当前线程上的锁计数用于统计目的。

当模块锁计数达到零时,可以卸载该模块。

另请参阅

类概述
Module 类