내 간단한 pong 게임에서 GetAsyncKeyState()를 사용하여 사용자가 화살표 키를 눌렀는지 확인합니다. 나는이 기능을 특정 방식으로 사용해야한다고 온라인으로 읽었지 만 CPU가 너무 무거웠다는 것을 알았습니다 (CPU의 50 % 사용)! 그러나 다소 놀랍지 만, 주위를 놀고 난 후에 내가 sleep(1);
을 추가하면 CPU 사용량이 0 %로 내려 갔고 모든 것이 잘 작동한다는 것을 알았습니다. 이 기능을 사용하거나 CPU 사용을 줄이는 좋은 방법이 있어야합니다.GetAsyncKeyState() 매우 CPU가 무거움? 올바르게 사용하고 있습니까?
도움이 필요하시면 큰 도움이됩니다.
내 코드 : 그것은 아니다
while(true)
{
for(i = 8; i < 191; ++i)
{
if(GetAsyncKeyState(i) == -32767)
{
if(i == VK_LEFT)
// do stuff
else if(i == VK_RIGHT)
// do stuff
else if(i == VK_UP)
// do stuff
else if(i == VK_DOWN)
// do stuff
}
}
Sleep(1);
}
전체 키보드 상태를 계속 폴링하지 않고 윈도우 프로 시저에서'WM_KEYDOWN' /'WM_KEYUP' 메시지에 반응 할 수 있습니다. – xDD
'Sleep '은 무한 루프에 대한 해결책입니다. 그것은 당신의 스레드가 당신이 얻을 수있는 모든 기회를 CPU를 먹이려고 시도보다는 일찍 시간을 포기 수 있습니다. 물론 키 스트로크를 다룰 때 창 메시지 루프가 항상 선호됩니다. – chris
@chris 그것을 사용하면 좋은 코딩 연습이 될 수는 없지만? – Rhexis