다음을 통해 공유


FREETHRD 샘플: 컴파일러 COM 지원이 포함된 다중 스레드 클라이언트 및 자유 스레드 서버

이 샘플에서는 컴파일러 COM 지원이 포함된 다중 스레드 클라이언트 및 자유 스레드 서버를 보여 줍니다.

이 샘플은 다음 요소로 구성되어 있습니다.

  • Freclien - 다중 스레드 클라이언트

  • Freserve - 자유 스레드 in-process 서버

보안 정보보안 정보

이 샘플 코드는 개념을 설명하기 위한 것으로 개념과 관련된 코드만을 보여 줍니다. 특정 환경에 대한 보안 요구 사항을 충족하지 못 할 수 있고 표시된 그대로 사용하면 안됩니다. 안전하고 강력한 프로젝트를 만들려면 보안 및 오류 처리 코드를 추가하는 것이 좋습니다. Microsoft에서는 어떠한 보증도 없이 “있는 그대로” 이 샘플 코드를 제공합니다.

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

Visual Studio에서 샘플에 액세스하려면

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

    기본적으로 샘플은 drive:\Program Files\Microsoft Visual Studio 10.0\Samples\에 설치되어 있습니다.

  • 이 샘플의 최신 버전과 다른 샘플의 목록을 보려면 MSDN 웹 사이트에서 Visual Studio 샘플을 참조하십시오.

샘플 빌드 및 실행

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

  1. freethrd.sln 솔루션을 엽니다.

  2. 서버 프로젝트와 클라이언트 프로젝트를 차례로 빌드합니다.

  3. 클라이언트 프로젝트를 시작 프로젝트로 만들어 해당 샘플을 실행합니다. 시작 프로젝트로 만들 때는 해당 프로젝트 노드를 마우스 오른쪽 단추로 클릭한 다음 시작 프로젝트로 설정을 클릭합니다.

샘플 작동 방식

Freclien 샘플에서는 다중 스레드를 생성하여 Freserve 자유 스레드 서버에서 제공하는 COBall COM 개체를 만들고 사용합니다. COBall 개체 자체는 스레드를 생성하지 않고 대신 여러 클라이언트 스레드의 IBall 인터페이스 요청에 수동적으로 응답합니다. Freclien 클라이언트에서는 해당 개체가 노출시키는 IBall 인터페이스를 통해 하나의 COBall 개체를 만들고 제어합니다. Freclien의 스레드 세 개가 IBall::Move에 대한 호출을 통해 볼을 이동하면 남은 주 스레드에서는 시스템 타이머를 사용하여 적절한 때에 COBall 개체의 위치, 크기 및 색을 업데이트합니다. 이 주 스레드에서는 IBall::GetBall를 호출해서 가져온 데이터를 사용하여 클라이언트의 주 창에 볼의 그래픽 스냅숏 이미지를 표시합니다.

Freserve 샘플에서 COBall 개체는 해당 개체의 Move 메서드를 마지막으로 호출한 스레드에 맞게 색 속성을 내부적으로 업데이트합니다. 표시 스레드에서는 해당 스레드가 표시하는 각 볼 이미지에 이 데이터를 사용합니다. 볼이 이동하면 표시 스레드는 볼을 이동한 각 스레드에 맞게 볼 색을 변경합니다. 볼이 이동할 때 남는 자국을 보면 이러한 전달 스레드의 동작이 어떻게 변화하는지 시각적으로 알 수 있습니다. 이 자국은 COM의 자유 스레드 모델을 사용하는 경우 동일한 개체에 대해 인터페이스를 요청하는 모든 스레드가 호출 스레드에서 개체에 액세스한다는 것을 보여 줍니다. 단일 볼 개체의 여러 가지 색은 각각 서로 다른 호출 스레드를 나타냅니다.

이 샘플에서는 네이티브 컴파일러 COM 지원을 사용합니다. 이 샘플은 자유 스레드 모델을 사용하여 RECT 및 POINT 구조체를 마샬링하는 사용자 지정 COM 인터페이스의 예를 보여 줍니다. 또한 #import 지시문의 exclude 특성을 사용하는 방법도 보여 줍니다.

참고 항목

참조

Compiler COM Support

기타 리소스

컴파일러 COM 지원 샘플

일반 샘플