FIX: ATL EXE 서버 CComAutoThreadModule에 대해 기반에 대한 등록 응답하지 않을 수 있다

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

202128
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
현상
ATL EXE 서버 기반 CComAutoThreadModule < >에 등록되어 있거나 등록이 때 응답하지 않을 수 있습니다.
원인
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 Visual C++ .NET에서 수정되었습니다.
추가 정보
  1. Appwizard를ATL EXE 만들 수 있습니다.
  2. 프로젝트에 있는 모든 종류의 ATL 개체 삽입하십시오.
  3. 함께 CComAutoThreadModule<ccomsimplethreadallocator>CComModule Stdafx.h에서 바꾸기.
  4. 프로젝트를 빌드하십시오.

    참고: 사용자 지정 빌드 단계는 서버를 등록합니다 때문에 시점에서 서버가 응답하지 않을 수도 있습니다 가능성이 없습니다.
  5. 프로젝트 설정 메뉴 에서 디버그 탭 형식 "/RegServer" 프로그램 인수 대화 상자에서.
  6. 서버 디버거에서 실행할.

    참고: 처음 중단될 경우 이 단계를 반복합니다. 관련된 타이밍 때문에 특정 시스템에서 문제를 재현할 수 없습니다.
kbDSupport

경고: 이 문서는 자동 번역되었습니다

속성

문서 ID: 202128 - 마지막 검토: 01/06/2015 04:07:17 - 수정: 2.0

  • Microsoft ActiveX Template Library 3.0
  • kbnosurvey kbarchive kbmt kbbug kbfix kblocalsvr kbthread KB202128 KbMtko
피드백