Computer/C, CPP, MFC Updated: 2014. 3. 26. 15:07 hwaya.

PeekMessage

반응형

게임을 만들때 중요한것 중 확인하고 넘어가야 할 부분은 메세지 루프 입니다.

일반적으로 message를 가져오는 GetMessage() 함수가 있습니다.

 

이 함수는 메세지 큐에서 message를 가져와 message구조체에 복사하고 message 큐에 복사한다.

message가 없을때는 새로운 message가 들어올 때까지 리턴을 하지 않습니다.

 

메세지가 들어오기 전까지는 놀고 있게 되는건데,

이 놀고 있는 시간을 dead time(데드 타임) 이라고 합니다. (MicroSoft 특허가 있다고 하더라..)

 

메세지가 없는 시간 또는 구간에 우리가 다른 작업을 할 수 있다면, 메세지 처리 시간과 별개로

다른 작업에 영향을 주지 않고 실행해야할 것들을 처리할 수 있겠습니다.   만,

 

GetMessage()의 특성상 메세지가 들어오지 않을 시에는 리턴되는 값이 없기 때문에,

dead time을 활용 할 수가 없습니다.

 

이 dead time을 사용하기 위해서 메세지 루프에  PeekMessage()를 사용하게 됩니다.


PeekMessage()는 일반적으로 메세지를 처리하는 부분은 GetMessage() 동일 합니다.

메세지가 있다면 true를 반환 하고, 메세지가 없다면 false를 반환 하게 되는데,

 

while( true )

{

if(PeekMessage(&msg ......)

{

TranslateMessage(&message);

DispatchMessage(&message);

}

else

{

MainGame.Progress();

MainGame.Render();

}

}

 

위처럼 PeekMessage()가 false를 반환 할 경우에 즉 메세지가 없을때 (dead time)

MainGame.Progress(); 와 MainGame.Render(); 를 실행하게 됩니다.

 

PeekMessage()를 사용한다면 dead time을 위처럼 사용 할 수 있겠습니다.

마지막으로 PeekMessage()의 마지막 인자로 PM_REMOVE 를 사용하면, 현재 처리한 메세지와 같은 메세지가 들어온다면 그 메세지를 삭제합니다. 반대로 PM_NOREMOVE는 메세지를 제거하지 않고 리턴 합니다.

 

-> 메세지가 있는지 확인을 하고 없다면 false를 반환 합니다.

-> 리턴값이 TRUE이면, 메세지가 있고, FALSE면 메세지가 없다.

 

일반적으로 게임을 프로그래밍 해야 한다면 PeekMessage()를 사용해야 겠습니다.

message가 없을때 Game이 멈춰 있다면 안되겠지요.


[출처] API에서 가장 중요한 메세지루프! ( GetMessage, PeekMessage ) | 작성자 AhHee

반응형

'Computer > C, CPP, MFC' 카테고리의 다른 글

ReadFile()  (0) 2015.12.04
SetFilePointer()  (0) 2015.12.04
프로그램 종료  (0) 2015.10.13
하위폴더까지 전체 복사하기  (0) 2015.10.02
윈도우 버전 알아보기  (0) 2015.10.02
Windows Styles  (0) 2015.06.15
timeSetEvent 와 친구들  (0) 2015.06.02
Printf 함수에 대해서 알아보자  (0) 2011.07.13

Table of Contents


    EIGHTBOX
    EIGHTBOX
    hwaya.

    programmer

    🍋일상의 소소한 순간들부터 큰 꿈까지, 호기심을 만족시킬 다양한 카테고리를 담은 블로그 입니다. 그리고, 소소한 행동에 감동하며 기뻐하고 하루하루에 감사하는 사람🌵

    Today Yesterday Total
    최신글