회사에서 작업하는 프로젝트를 Visual Studio 2015로 마이그레이션하면서 생겼던 문제 중 가장 심각했던 것이 브레이크포인트를 걸고 디버그 작업을 하려고 하면 마우스 커서 이동이 엄청나게 느려진다는 것이었습니다. 과거에도 프로젝트 마이그레이션을 시도했으나 이 문제로 고민했다는 기록이 있었습니다.

본 프로젝트는 어찌어찌하다보니 그런 문제가 발생하지 않아서 넘어갔는데(…) 툴 프로젝트에서는 여전히 문제가 발생하더군요. 열심히 까보고 검색한 결과 다음 글을 찾았습니다.

위의 포스트에 적혀있는대로 DirectInput이 원인이었습니다. 가끔씩 IDirectInputDevice7::Acquire()가 실패할 때가 있었는데 그 경우에는 느려지지 않더군요.1

저 분은 GetAsyncKeyState()를 사용하는 것으로 대처했습니다만, 저는 그냥 윈도 메시지를 통하는 것으로 처리했습니다. 아케이드 게임이 아닌지라 폴링을 해야할 필요도 없었고, 어차피 윈도 메시지 처리도 따로 하고 있었으니까요. 그래서 WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP, WM_SYSKEYDOWN에서 코드를 추가했다가, 이후 Raw Input으로 바꾸었습니다. 아직 발견하지 못한 문제가 있을지도 모르지만 현재로서는 큰 문제가 없는 것 같습니다.

  1. 상관없는 이야기지만 저 분이 아무래도 제 전임자인듯 싶습니다. 비주얼 스튜디오와 DirectInput의 버전, 래퍼의 인터페이스와 변수명이 완전히 일치하고, 포스트 작성일도 전임자 분이 작업하던 시기와 비슷합니다.