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 | 管理模块的单元。 |
备注
注意
此类已过时,已由 CAtlAutoThreadModule 和 CAtlModule 派生类替换。 以下信息适用于较旧 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;
};
继承层次结构
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::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] 传递给 DLLMain
或 WinMain
的 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
使用模块锁计数来确定是否有客户端正在访问该模块。 当前线程上的锁计数用于统计目的。
当模块锁计数达到零时,可以卸载该模块。