콘텐츠로 건너뛰기

Windows message pump

DirectX 렌더링 프로그램을 만들다 보면 main() 함수에 다음과 같은 코드를 볼 수 있다.

main()
{
   ...
   while(1)
   {
      if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
      {
         if(msg.message == WM_QUIT)
            break;
         TranslateMessage(&msg);
         DispatchMessage(&msg);
      }
      else
      {
         renderer.Update();
         renderer.Render();
      }
   }
   ...
}

다음과 같은 코드를 메세지 펌프 라고 부른다.
다른 메세지를 처리하는 중에 큐에서 메세지를 꺼내 처리하는 코드

이 단어는 Z emotion에 다닐 때 들은 것인데 오늘 문득 저게 떠올랐다, 갑자기?, 하지만 ‘메세지 펌프’ 라는 용어가 기억이 안나 한참을 검색하여 발견한 내용을 기억하기 위해 포스트로 적게 되었다.


윈도우에서 이벤트 메세지를 가져오는 함수는 두가지가 있다

GetMessage(…) 와 PeekMessage(…) 두 함수는 메세지 큐가 비어있을 때 리턴 여부에 있다.

GetMessage(…) 의 활용은 다음과 같다.

while(bRet = (GetMessage(&msg, hWnd, 0, 0) != 0)) // <<여기서 대기
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

출처 : https://abipictures.tistory.com/26


답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다