Oprava: Server ATL EXE na základě CComAutoThreadModule může přestat reagovat na registrace

Překlady článku Překlady článku
ID článku: 202128 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Serveru ATL EXE na základě CComAutoThreadModule <>může přestat reagovat při zaregistrován nebo registrace zrušena.

Příčina

CComAutoThreadModule<>::Init() nazývá WinMain() vytvoří fondu podprocesů (výchozí 4 podprocesů). Destruktor globální CComAutoThreadModule díky určitých těchto podprocesů ukončit před ukončí proces. K tomu pomocí zaúčtování WM_QUIT zprávy jednotlivým podprocesy ve fondu podprocesů a volání WaitForSingleObject() na popisovač podprocesu. Podprocesy jsou naplánovány například, že podprocesy ve fondu pravděpodobně nebudou mít nazývá GetMessage() a tak fronty zpráv není vytvořen. To způsobí PostThreadMessage() nezdaří. Tedy podprocesy ve fondu není ukončena a WaitForSingleObject() čeká infinitely podprocesů ukončit.

Řešení

V souboru Altcom.h uvnitř adresáře vc98\atl\include destruktor funkce CComAutoThreadModule nahraďte následující kód:
   ::PostThreadMessage(m_pApartments[i].m_dwThreadID, WM_QUIT, 0, 0);
				

s tímto kódem:
   while (::PostThreadMessage(m_pApartments[i].m_dwThreadID, WM_QUIT,
      0, 0) == 0) ::Sleep(100);
				

Prohlášení

Společnost Microsoft potvrzuje, že se tuto chybu v produktech společnosti uvedených na začátku tohoto článku.

Tento problém byl opraven v aplikaci Microsoft Visual C++ .NET.

Další informace

  1. Slouží k vytvoření ATL EXEAppwizard.
  2. Vložit libovolný typ objektu ATL v projektu.
  3. V Stdafx.h nahraďte CComModuleCComAutoThreadModule<ccomsimplethreadallocator>.
  4. Vytváření projektu.

    Poznámka: existuje pravděpodobnost, že server může přestat reagovat v tomto okamžiku od kroku vlastní sestavení registruje serveru.
  5. V nabídce Project nastavení ve skupinovém rámečku Typ Debug kartu "/ RegServer" v dialogovém okně Programu argumenty.
  6. Server spustit v ladicím modulu.

    Poznámka: Pokud není zavěsit první, opakujte tento krok. Protože související časování, může v určitých počítačích není reprodukovat problém.

Vlastnosti

ID článku: 202128 - Poslední aktualizace: 11. prosince 2003 - Revize: 2.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft ActiveX Template Library 3.0 na těchto platformách
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Klíčová slova: 
kbmt kbbug kbfix kblocalsvr kbthread KB202128 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:202128

Dejte nám zpětnou vazbu

 

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