XInputGetState зависает

Я пытаюсь использовать XInput API для своего игрового движка (я использую DirectX11 и C ++). Я просто хочу проверить, найден ли контроллер, поэтому я #included и вызываю XInputGetState, но я получаю странное поведение:

    XINPUT_STATE state;
ZeroMemory(&state, sizeof(XINPUT_STATE));

DWORD result;
for (DWORD i = 0; i < XUSER_MAX_COUNT; i++)
{
result = XInputGetState(i, &state);
if (result == ERROR_SUCCESS)
ErrorBox(L"found controller on port ");
}

если я подключаю контроллер, программа зависает и зависает, а если я отключаю контроллер, игра запускается. Если я перейду к коду с помощью отладчика, результатом будет то, что контроллер найден и появится окно сообщения.
Зачем?

РЕДАКТИРОВАТЬ проблема, кажется, заключается в вызове ErrorBox: эта функция просто отображает окно сообщения с помощью Win32 API.

0

Решение

Производительность снижается, когда вы проверяете контроллер, который не был подключен в прошлый раз, когда вы вызывали его, потому что он должен перечислять устройство, открывать соединения с драйверами и т. Д. Поэтому рекомендуется выполнять циклический обмен вызовами для проверки новых контроллеров. Если вы получаете ERROR_DEVICE_NOT_CONNECTED назад, вы не должны звонить XInputGetState снова на этот слот на некоторое время. Пример этого см. GamePad класс в Directx Tool Ki и ThrottleRetry функция.

Другими словами, цикл, который вы написали ранее, не является хорошей идеей для вызова каждого кадра, если нет XUSER_MAX_COUNT контроллеры на самом деле подключены.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]