CComAutoThreadModule 類別
自ATL 7.0起,已經過時:如需詳細資訊, CComAutoThreadModule
請參閱 ATL模組類別 。
重要
這個類別及其成員不能用於在 Windows 執行階段 中執行的應用程式。
語法
template <class ThreadAllocator = CComSimpleThreadAllocator>
class CComAutoThreadModule : public CComModule
參數
ThreadAllocator
[in]管理線程選取範圍的類別。 預設值為 CComSimpleThreadAllocator。
成員
方法
函式 | 描述 |
---|---|
CreateInstance | 選取線程,然後在相關聯的 Apartment 中建立物件。 |
GetDefaultThreads | (靜態)根據處理器數目,動態計算模組的線程數目。 |
Init | 建立模組的線程。 |
鎖定 | 遞增模組和目前線程上的鎖定計數。 |
開鎖 | 遞減模組和目前線程上的鎖定計數。 |
資料成員
數據成員 | 描述 |
---|---|
dwThreadID | 包含目前線程的識別碼。 |
m_Allocator | 管理線程選取。 |
m_nThreads | 包含模組中的線程數目。 |
m_pApartments | 管理模組的公寓。 |
備註
注意
這個類別已經過時,已由 CAtlAutoThreadModule 和 CAtlModule 衍生類別取代。 下列資訊是與舊版 ATL 搭配使用。
CComAutoThreadModule
衍生自 CComModule ,以實作 EXE 和 Windows 服務的線程集區 Apartment 模型 COM 伺服器。 CComAutoThreadModule
會使用 CComApartment 管理模組中每個線程的 Apartment。
當您想要在多個 Apartment 中建立物件時,請從 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 值。
備註
選取線程,然後在相關聯的 Apartment 中建立物件。
CComAutoThreadModule::d wThreadID
自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]對象對應項目陣列的指標。
小時
[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 模組中的線程數目。 呼叫 Init 時,m_nThreads
會設定為 nThreads 參數值。 每個線程相關聯的 Apartment 都是由 CComApartment 物件管理。
CComAutoThreadModule::m_pApartments
自ATL 7.0起,已經過時:如需詳細資訊, CComAutoThreadModule
請參閱 ATL模組類別 。
CComApartment* m_pApartments;
備註
指向 CComApartment 物件的數位,每個物件都會管理模組中的 Apartment。 陣列中的元素數目是以m_nThreads成員為基礎。
CComAutoThreadModule::Unlock
自ATL 7.0起,已經過時:如需詳細資訊, CComAutoThreadModule
請參閱 ATL模組類別 。
LONG Unlock();
傳回值
對於診斷或測試而言可能很有用的值。
備註
對模組和目前線程的鎖定計數執行不可部分完成遞減。 CComAutoThreadModule
會使用模組鎖定計數來判斷是否有任何用戶端正在存取模組。 目前線程上的鎖定計數用於統計用途。
當模組鎖定計數達到零時,即可卸除模組。