FIX: 根據 CComAutoThreadModule ATL EXE 伺服器可能會掛上註冊

文章翻譯 文章翻譯
文章編號: 202128 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

徵狀

註冊或取消註冊時,根據 CComAutoThreadModule < > 的 ATL EXE 伺服器可以停止回應。

發生的原因

CComAutoThreadModule<>::Init() WinMain() 中呼叫建立執行緒集區 (預設值 4 的執行緒)。解構函式的全域 CComAutoThreadModule 使得某些這些執行緒終止處理程序終止之前。就會發生這種情況在執行緒集區中張貼到每個執行緒 WM_QUIT 訊息的訊息,並在執行緒控制代碼上呼叫 WaitForSingleObject()。執行緒的排程,讓執行緒集區中的可能不具有呼叫 GetMessage(),因此不會建立訊息佇列。這會導致失敗 PostThreadMessage()。因此,不終止執行緒集區中的執行,並 WaitForSingleObject() 無限地等待終止執行緒。

解決方案

Altcom.h] 檔案中的解構函式 CComAutoThreadModule 函式中 vc98\atl\include 目錄內取代下列程式碼:
   ::PostThreadMessage(m_pApartments[i].m_dwThreadID, WM_QUIT, 0, 0);
				

使用這段程式碼:
   while (::PostThreadMessage(m_pApartments[i].m_dwThreadID, WM_QUIT,
      0, 0) == 0) ::Sleep(100);
				

狀況說明

Microsoft 已確認這是在本篇文章開頭所列的 Microsoft 產品中有錯誤。

這個問題已經在 Microsoft Visual C++.NET 中獲得修正。

其他相關資訊

  1. 使用 Win32 應用程式] 將 建立 ATL EXE
  2. 在專案中插入 ATL 物件的任何型別。
  3. 在 Stdafx.h,取代 CComModuleCComAutoThreadModule<ccomsimplethreadallocator>.
  4. 建置專案。

    注意: 沒有伺服器可能會在此時擱置,因為自訂建置步驟會註冊伺服器的機會。
  5. 在 [偵錯] 索引標籤類型] 下的 [專案設定] 功能表中"/ RegServer程式引數] 對話方塊中。
  6. 在偵錯工具中執行伺服器。

    注意: 如果它不會停止回應第一次,重複此步驟。由於這是計時相關,問題可能會不重現特定的機器上。

屬性

文章編號: 202128 - 上次校閱: 2003年12月11日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft ActiveX Template Library 3.0?應用於:
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
關鍵字:?
kbmt kbbug kbfix kblocalsvr kbthread KB202128 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:202128
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com