2013-07-21 20 views
10

Jaka jest różnica między uzyskanie naciśnięcie klawisza z:GetKeyState() vs. GetAsyncKeyState() vs. getch()?

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

Kiedy należy używać jednego nad drugim?

+2

Dlaczego spadamy? Nie mogę znaleźć żadnych wyników na ten temat ze stackoverflow, nawet jeśli ignoruję 'getch()' i szukam 'GetKeyState() vs. GetAsyncKeyState()'. –

Odpowiedz

13

GetKeyState() i GetAsyncKeyState() są specyficznymi dla systemu Windows interfejsami API, podczas gdy getch() działa na innych kompilatorach C działających bez systemu Windows.

GetKeyState() pobiera kluczowy status zwrócony z kolejki komunikatów wątku. Status nie odzwierciedla stanu przerwania związanego ze sprzętem.

Funkcja GetAsyncKeyState() określa, czy klawisz został naciśnięty od ostatniego wywołania funkcji GetAsyncKeyState() oraz czy klawisz jest aktualnie w górę lub w dół. Jeśli najważniejszy bit jest ustawiony, klawisz jest wyłączony, a jeśli ustawiony jest bit najmniej znaczący, klawisz został naciśnięty po poprzednim wywołaniu funkcji GetAsyncKeyState().

To, co widziałem w praktyce, polega na tym, że jeśli przytrzymasz klawisz wciśnięty i przypisujesz zachowanie po naciśnięciu klawisza, jeśli użyjesz GetKeyState(), zachowanie będzie wywoływane więcej razy niż gdybyś użył GetAsyncKeyState().

W grach wolę używać GetAsyncKeyState().

(Można również sprawdzić więcej szczegółów na blogu MSDN).