質問です。IDirectInputDevice8 の GetDeviceState キーボード入力で悩んでます。
キーステート取得部分はコードは以下のような感じです。_TRACE_()はデバッグ用メッセージ出力です。
--------------------------------------------
LPDIRECTINPUTDEVICE8 GgafDx9Input::_s_pIDirectInputDevice8_Keyboard;
char GgafDx9Input::_s_caKeyboardState[256];

void GgafDx9Input::updateKeyboardState() {
  again:
  HRESULT hr = _s_pIDirectInputDevice8_Keyboard->GetDeviceState(sizeof(_s_caKeyboardState), (void*)&_s_caKeyboardState);
  if(FAILED(hr)){
    _TRACE_("GetDeviceState is FAILED");
    hr = _s_pIDirectInputDevice8_Keyboard->Acquire();
    if(hr == DI_OK) {
      goto again;
    } else {
      //ダメならまた次回へ
    }
  }
  return;
}
-----------------------------------------
ここで、例えば"z"キーを押しっぱなしにしたとして、60FPSの頻度で updateKeyboardState()を実行し
if (_s_caKeyboardState[DIK_Z] & 0x80)
で押されているか調べるのですが、本当にごく稀に上記条件が真にならないことがあるのです。
しかもその現象が起こったとき、デバッグメッセージが一つも表示されていないので、どうやら GetDeviceState は成功しているようなのです。
押しっぱなしが重要なアプリでなんとか解決したいのですが、どこがまずいのかわかりません。ご教授をお願いいたします。
または、同じようなことで悩んでいる方おられませんか? 代替案などもあれば知りたいです。