컴퓨터 프로그래밍 공부

20230222 정리

게임 개발 2023. 2. 23. 14:53

메시지 큐

 

메시지 큐란?

메시지 큐 (Message Queue)란 프로세서 간에 데이터를 교환할 때 사용되는 통신 방법 중에 하나이다.

더 큰 개념으로는 MOM(Message Oriented Middleware : 메세지 지향 미들웨어)를 의미한다.

MOM이란 비동기 메시지를 사용하는 프로그램 간 데이터 송수신을 의미하며,

MOM을 구현한 서비스를 MQ라고 한다.

 

PeekMessage 함수

PeekMessage 는 GetMessage함수와 유사하다. 둘 다 필터 조건과 일치하는

메시지에 대한 메시지 큐를 확인한 다음 MSG 구조에 메시지를 복사한다.

두 함수 간의 주요 차이점은 필터 조건과 일치하는 메시지가 큐에 배치될 때까지

GetMessage가 반환되지 않은 반면 PeekMessage는 메시지가 큐에 있는지 여부에 관계 없이 즉시 반환된다는 것이다.

 

출저 https://learn.microsoft.com/ko-kr/windows/win32/winmsg/messages-and-message-queues

 

 

GetMessage 함수

호출 스레드의 메시지 큐에서 메시지를 검색한다.

함수는 게시된 메시지를 검색할 수 있게 될 때까지 들어오는 보낸 메시지를 디스패치한다.

GetMessage와 달리 PeekMessage 함수는 반환하기 전에 메시지가 게시될때 까지 기다리지 않는다.

 

출저 https://learn.microsoft.com/ko-kr/windows/win32/winmsg/messages-and-message-queues

 

 

윈도우 프로시저

 

창 프로시저의 각 창은 특정 창 클래스이 멤버이다.

창 클래스는 개별 창에서 메시지를 처리하는 데 사용하는 기본 창 프로시저를 결정한다.

동일한 클래스에 속하는 모든 창은 동일한 기본 창 프로시저를 사용한다.

예를 들어 시스템은 콤보 상자 클래스(COMBOBOX)에 대한 창 프로시저를 정의한다.

모든 콤보 상자는 해당 창 프로시저를 사용한다.

 

창 프로시저는 창에 전송된 메시지를 수신하고 처리하는 함수이다.

모든 창 클래스에는 창 프로시저가 있으며,

해당 클래스로 만든 모든 창은 동일한 창 프로시저를 사용하여 메시지에 응답한다.

 

++PULS 콤보상자

 

콤보 상자는 목록과 선택 필드로 구성된다.

목록에는 사용자가 선택할 수 있는 옵션이 표시되고

선택 영역에 현재 선택 영역이 표시된다.

선택 필드가 편집 컨트롤인 경우 사용자는

목록에서 사용할 수 없는 정보를 입력할 수 있다.

그렇지 않으면 사용자가 목록에서 항목만 선택할 수 있다.

 

 

메시지 루프

 

메시지 루프란 메시지 큐에서 메시지를 계속해서 꺼내는 반복문을 말한다.

 

간단한 메시지 루프는 GetMessage, TranslateMessage 및 DispatchMessage라는

세 가지 함수 각각에 대한 하나의 함수 호출로 구성 된다.

오류가 있는 경우 GetMessage는 -1 을 반환하므로 특수 테스트가 필요하다.

GetMessage 함수는 큐에서 메시지를 검색하여 MSG 형식의 구조를 복사한다.

WM_QUIT 메시지가 발생하지 않는 한 0이 아닌 값을 반환한다.

 

 

 

static

 

static 키워드는 C++ 언어에서 가장 혼동되는 키워드 중 하나이다.

어디에서 사용되는지에 따라 다른 의미를 지니기 때문이다.

 

static 키워드가 전역 변수에서 사용될 때

'내부 연결 속성'을 적용한다는 것을 알았다.

즉, 변수가 정의된 소스 파일 내에서 사용 가능함을 의미한다.

 

static 키워드는 블록 내에서 선언된 지역 변수에서도 사용할 수 있다.

지역 변수는 '자동 주기 (auto duration)'을 가지며,

정의되는 시점에서 생성되고 초기화되며, 

정의된 블록이 끝나는 지점에서 소멸한다.

static 키워드를 사용한 지역 변수는 완전히 다른 의미가 있다.

static 키워드를 사용한 지역 변수는 

'자동 주기(auto duration)' 에서 ' 정적 주기 (static duration)'로 바뀐다.

 

 

메모리 구조

 

 

변수 주기

 

  • 자동 주기

자동 주기인 변수는 정의 지점에서 생성되며,

정의된 블록이 끝나면 소멸한다.

  • 정적 주기

정적 주기인 변수는 프로그램이 시작될 때 생성되고,

프로그램이 종료하면 소멸한다.

  • 전역 변수
  • 정적 변수
  • 동적 주기

동적 주기인 변수는 프로그래머의 요청에 의해 생성되고, 소멸한다

  • 동적으로 할당된 변수

 

 

외부 & 내부 링크

 

내부 링크는 '정의'를 현재 변환 단위에서만 접근할 수 있다는 것을 뜻한다.

그렇기 때문에 내부 링크로된 정의는 다른 변환 단위에서 볼 수 없다.

 

외부 링크는 정의가 한 변환 단위에만 제한이 되지 않는다는 것을 뜻한다.

외부 링크 정의는 .obj 파일에 외부 심볼을 만든다.

이 외부 심볼은 다른 모든 변환 단위가 자신에겐 정의되지 않는 심볼을 확인하기 위해 사용된다.

외부 심볼은 프로그램 네에서 중복될 수 없다.

중복된다면 링크되지 않는다. 

 

인라인이 아닌 멤버함수나 일반함수는 외부 링크 속성을 갖고 있다.