WIN32API FrameWork/코드별 설명 개별저장(검색용)
GetMessage , PeekMessage
hyrule
2022. 5. 3. 14:53
* GetMessage: 메시지 큐에서 메시지를 꺼내오는 함수이다.
단, 메시지 큐가 비어있을 경우 메시지가 들어올 때까지 빠져나올 수 없다.
이렇게 멈춰서 대기하고 있는 것을 블로킹 모드라고 한다.
큐가 비어서 멈춰있는 시간을 윈도우 데드타임이라고 한다.
게임의 경우에는 잘 쓰이지 않는다.
사람이 아무리 키보드 마우스로 입력을 많이 해 봐야 컴퓨터가 처리하는 데에는
찰나의 시간밖에 안 걸리기 때문에, 데드타임이 매우 길기 때문이다.
일반 프로그램이 데드타임에 입력이 들어오기만을 기다린다면,
게임은 이 데드타임에 게임의 로직을 처리한다.
그렇기에 게임의 경우에는 PeekMessage라는 함수를 사용한다.
메시지 큐에서 메시지를 꺼낸 뒤의 데드타임동안 프레임을 그리는 것이다.
MSG: 운영체제가 만들어준 메시지를 얻어오기 위한 구조체
&msg: 콜 바이 어드레스
MSG msg;
GetMessage(&msg, nullptr, 0, 0);
* PeekMessage: 이 함수도 메시지 큐에서 메시지를 꺼내오는 함수이다.
단, 이 함수는 메시지 큐가 비어있을 경우
false를 반환하며 바로 빠져나오게 된다.
PeekMessage(&msg, m_hWnd, 0, 0, PM_REMOVE);