AutoThread 특성 샘플: CAtlAutoThreadModule 사용

업데이트: 2007년 11월

AutoThread 샘플에서는 CAtlAutoThreadModule의 사용 방법을 보여 줍니다. 서버는 Server.exe 파일에서 구현되고, EXE의 모듈은 CAtlModule 대신 CAtlAutoThreadModule 에서 파생됩니다.

AutoThread 샘플은 이 샘플의 특성을 사용하지 않는 버전입니다.

보안 정보:

이 샘플 코드는 개념을 보여 주기 위해 제공되며 가장 안전한 코드 작성 방법을 제시하지 않을 수 있으므로 응용 프로그램이나 웹 사이트에서 사용할 수 없습니다. Microsoft는 샘플 코드를 원래 용도 이외의 다른 용도로 사용하는 경우 발생하는 부수적이나 파생적인 손해에 대해 책임을 지지 않습니다.

샘플 및 이를 설치하기 위한 지침을 가져오려면

  • Visual Studio의 도움말 메뉴에서 샘플을 클릭합니다.

    자세한 내용은 샘플 파일 찾기를 참조하십시오.

  • 최신 버전 및 전체 샘플 목록은 Visual Studio 2008 Samples 페이지에서 온라인으로 사용할 수 있습니다.

  • 컴퓨터의 하드 디스크에서도 샘플을 찾을 수 있습니다. 기본적으로 샘플과 추가 정보 파일은 \Program Files\Visual Studio 9.0\Samples\ 아래의 폴더에 복사됩니다. Visual Studio Express Edition의 경우에는 모든 샘플이 온라인에 있습니다.

이 샘플을 빌드하고 실행하려면

  1. 솔루션 파일인 AutoThread.sln을 엽니다.

  2. 빌드 메뉴에서 솔루션 빌드를 클릭합니다. 클라이언트 및 서버가 빌드되고 등록됩니다.

  3. ActiveX Control Test Container의 두 인스턴스를 시작합니다. 테스트 컨테이너에 액세스하는 방법에 대한 자세한 내용은 Test Container를 사용하여 속성 및 이벤트 테스트를 참조하십시오.

  4. 클라이언트 컨트롤(CAutoCtl 클래스) 중 하나를 각 테스트 컨테이너에 삽입합니다.

  5. 컨트롤 중 하나를 클릭하면 서버에서는 1초 내외에 응답합니다.

  6. 두 테스트 컨테이너가 동시에 보이도록 테스트 컨테이너의 위치 및 크기를 조정합니다.

  7. 컨트롤 중 하나를 클릭한 다음 다른 컨트롤을 재빨리 클릭합니다. 두 컨트롤의 대기 상태가 거의 동시에 끝나는지 확인합니다. CComAutoThreadModule을 사용하지 않은 경우 첫 번째 컨트롤은 1초 후에 대기 상태가 끝나지만 두 번째 컨트롤은 첫 번째 컨트롤의 대기 상태가 끝나야만 끝납니다. 즉, 첫 번째 대기 상태에 대한 호출이 끝나야만 두 번째 대기 상태에 대한 호출이 발생합니다. Delay(PropGet)Delay(PropPut) 메서드를 사용하여 서버의 대기 시간을 밀리초 단위로 조정할 수 있습니다. 올바르게 설정된 경우에는 두 번째 대기 상태에 대한 호출이 첫 번째 대기 상태에 대한 호출보다 먼저 반환될 수 있습니다.

샘플 작동 방식

서버 인터페이스에는 Sleep이라는 하나의 메서드가 있습니다. 이 메서드는 서버 스레드를 일정 시간 동안 대기 상태로 둡니다. 샘플의 클라이언트 부분은 사용자가 컨트롤을 클릭할 때 서버의 대기 메서드를 호출하는 ActiveX 컨트롤입니다. 클라이언트에는 서버 스레드의 대기 시간을 나타내는 Delay라는 속성도 있습니다. 컨트롤이 사용자의 클릭을 기다리는 동안에는 "준비"라는 텍스트가 표시됩니다. 컨트롤이 서버의 대기 상태가 끝나기를 기다리는 동안에는 "Waiting"이라는 텍스트가 표시됩니다.

특성

이 샘플에서는 다음의 특성을 사용합니다.

  • AutoThread/AutoClient   coclass, dual, emitidl, helpstring, id, in, module, object, out, pointer_default, progid, propget, propput, registration_script, retval, threading, uuid, version, vi_progid

  • AutoThread/AutoServer   coclass, dual, emitidl, helpstring, id, module, object, pointer_default, progid, threading, uuid, version, vi_progid

키워드

이 샘플에서는 다음의 키워드를 사용합니다.

AtlGetObjectSourceInterface, BEGIN_SINK_MAP, CoCreateInstance, DECLARE_CLASSFACTORY_SINGLETON, IDispEventSimpleImpl::DispEventAdvise, END_SINK_MAP, IConnectionPointContainerImpl, IConnectionPointImpl, IDispEventImpl, OLE2CT, SINK_ENTRY_EX, SysAllocString, USES_CONVERSION, VARIANT, VariantClear, VariantCopy

참고:

이 샘플을 비롯한 일부 샘플은 Visual C++ 마법사, 라이브러리 및 컴파일러의 변경 내용을 반영하도록 수정되지 않았지만 해당 작업의 수행 방법을 보여 줍니다.

참고 항목

기타 리소스

ATL 특성 샘플