共用方式為


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;
};

繼承階層架構

_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 值。

備註

選取線程,然後在相關聯的 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 傳遞至 DLLMainWinMain

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 模組中的線程數目。 呼叫 Initm_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 會使用模組鎖定計數來判斷是否有任何用戶端正在存取模組。 目前線程上的鎖定計數用於統計用途。

當模組鎖定計數達到零時,即可卸除模組。

另請參閱

類別概觀
模組類別