您目前已離線,請等候您的網際網路重新連線

如何在 ATL 中實作執行緒集區公寓模型 COM 伺服器

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:244495
本文已封存。本文係以「現狀」提供且不會再更新。
結論
Microsoft 使用中範本程式庫 (ATL) 可讓您定義出的處理序伺服 ATL 中的 STA 執行緒集區與建立自己的執行緒上執行的每個物件。本文的 < 其他相關資訊 > 一節中步驟將示範如何執行這項操作。
其他相關資訊
來建立物件的執行緒集區,則需要下列步驟:
  1. 從您 CExeModule 或 CServiceModule 類別衍生:
    CComAutoThreadModule<>					
    CExeModule : public CComAutoThreadModule<>					
  2. 可以在 STA 集區執行緒執行每個 ATL 類別中宣告 DECLARE_CLASSFACTORY_AUTO_THREAD()
  3. 可以在 STA 集區執行緒
    DECLARE_NOT_AGGREGATABLE(CMyPooledObject)					
  4. 變更模組 CExeModule::Unlock()CServiceModule::Unlock() 要呼叫的方法:
    CComAutoThreadModule<>::Unlock()						
    LONG CExeModule::Unlock(){   LONG l = CComAutoThreadModule<>::Unlock();   if (l == 0)   {     bActivity = true;     SetEvent(hEventShutdown); // tell monitor that we transitioned to zero   }   return l;}						
如果這正在做為服務,您必須執行一個步驟。變更下列的程式碼,從:
inline void CServiceModule::Init(_ATL_OBJMAP_ENTRY* p, HINSTANCE h, UINT nServiceNameID, const GUID* plibid){   CComModule::Init(p, h, plibid);				
到:
inline void CServiceModule::Init(_ATL_OBJMAP_ENTRY* p, HINSTANCE h, UINT nServiceNameID, const GUID* plibid){   CComAutoThreadModule<>::Init(p, h, plibid);				
依預設值,ATL 建立的每個處理器的四個執行緒集區。您可以變更這 _Module.Init() 呼叫 tWinMain() 函數呼叫中往後中選擇性指定的執行緒數目參數。根據預設值,CComAutoThreadModule 會使用 CComSimpleThreadAllocator 為執行緒配置器。CComSimpleThreadAllocator 使用簡單的循環配置,以在執行緒集區中建立物件。
参考
用於多個資訊查閱 DECLARE_CLASS_FACTORY_AUTO_THREAD()CComAutoThreadModule 和 Microsoft 開發人員的網路 (MSDN)。

如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
202128FIX: 根據 CComAutoThreadModule ATL EXE 伺服器可能會掛上註冊

警告:本文為自動翻譯

內容

文章識別碼:244495 - 最後檢閱時間:01/10/2015 12:14:43 - 修訂: 3.0

Microsoft ActiveX Template Library 3.0

  • kbnosurvey kbarchive kbmt kbarchitecture kbhowto kblocalsvr kbservice kbthread KB244495 KbMtzh
意見反應