25

キーを押すことの違いは何ですか:

  • GetKeyState()
  • GetAsyncKeyState()
  • getch()?

いつどちらを使用する必要がありますか?

4

2 に答える 2

23

GetKeyState() と GetAsyncKeyState() は Windows 固有の API ですが、getch() は Windows 固有でない他の C コンパイラで動作します。

GetKeyState() は、スレッドのメッセージ キューから返されたキー ステータスを取得します。ステータスは、ハードウェアに関連付けられた割り込みレベルの状態を反映していません。

GetAsyncKeyState() は、GetAsyncKeyState() への最後の呼び出し以降にキーが押されたかどうか、およびキーが現在 up か down かを示します。最上位ビットが設定されている場合、キーは押されています。最下位ビットが設定されている場合、GetAsyncKeyState() への前回の呼び出しの後にキーが押されました。

私が実際に見たのは、キーを押したままにし、キーが押されたときに動作を割り当てると、GetKeyState() を使用すると、GetAsyncKeyState() を使用した場合よりも動作が呼び出される回数が増えることです。

ゲームでは、GetAsyncKeyState() を使用することを好みます。

(MSDN ブログで詳細を確認することもできます)。

于 2013-07-21T09:52:03.883 に答える
5

非同期の意味を考えてください。

  • GetAsyncKeyState()キーの状態を非同期に取得します。つまり、何も待機せずに取得します。つまり、NOWです。

  • GetKeyState()キーの状態を同期的に取得します。これは、読み取ろうとしているキーのキーの状態ですgetch()。これは、キー押下自体とともにキーボード バッファのキューに入れられます。

例として、次のように入力されているが、まだ読み取られていないとします。

  • h
  • i
  • shift+1
  • ctrl(長押し)

GetAsyncKeyState()戻りますctrl pressed

GetKeyState() will returnH 押されたuntil you callgetch()`

GetKeyState()I pressedあなたが電話するまで戻ってきますgetch()

GetKeyState()その後、shift pressed, 1 pressedを呼び出すまで戻りますgetch()。これは戻ります ( +!を押した結果)shift1

GetKeyState()その後戻りますctrl pressed

于 2019-09-07T16:55:20.057 に答える