다음을 통해 공유


IGameInput::UnregisterCallback(v2)

콜백 메서드를 제거합니다. 이 메서드는 더 이상 호출되지 않으며, UnregisterCallback이 완료된 후 콜백 함수에서 리소스를 제거해야 할 수 있습니다.

구문

bool UnregisterCallback(
    GameInputCallbackToken callbackToken
);

매개 변수

callbackToken _In_
형식: GameInputCallbackToken

등록을 취소할 콜백 함수에 대한 토큰입니다. 함수가 처음에 IGameInput::RegisterDeviceCallback으로 등록되었을 때 생성됩니다.

반환 값

형식: bool

콜백이 성공적으로 등록 해제된 경우 True입니다.

비고

IGameInput::StopCallback 메서드 및 IGameInput::UnregisterCallback 메서드는 약간 다릅니다. 어느 메서드를 호출해도 연결된 콜백이 다시 발송되지 않습니다. 그러나 UnregisterCallback 함수가 성공적으로 반환될 때까지 콜백과 연결된 리소스(예: 콜백 함수를 호스트하는 DLL 언로드)를 해제하는 것은 안전하지 않습니다. 따라서 등록된 콜백 함수 내에서 콜백을 등록 취소할 수 없으며 이렇게 시도하면 치명적인 어설션이 트리거됩니다. 하지만 콜백 함수 내에서 콜백을 취소하는 것은 안전합니다.

다음 C++ 샘플은 게임 패드 또는 키보드가 연결 해제될 때 알림을 받는 방법을 보여줍니다.

Microsoft::WRL::ComPtr<IGameInput> gameInput;

void CALLBACK OnDeviceDisconnected(
    _In_ GameInputCallbackToken callbackToken,
    _In_ void * context,
    _In_ IGameInputDevice * device,
    _In_ uint64_t timestamp,
    _In_ GameInputDeviceStatus currentStatus,
    _In_ GameInputDeviceStatus previousStatus,
    )
{
    if (!(currentStatus & GameInputDeviceConnected))
    {
        // Application-specific code to handle the device disconnection
    }
}

void WaitForDisconnectWorker(
    _In_ IGameInputDevice * device,
    _In_ volatile bool & cancelWait) noexcept
{
    GameInputCallbackToken token;
    if (SUCCEEDED(gameInput->RegisterDeviceCallback(
        device,                                       // Watch for the specific input device
        GameInputKindGamepad | GameInputKindKeyboard, // Listen for changes with gamepads and keyboards
        GameInputDeviceConnected,                     // Notify on changes to GameInputDeviceConnected status
        GameInputNoEnumeration,                       // No initial enumeration needed
        nullptr,                                      // No callback context parameter
        OnDeviceDisconnected,                         // Callback function
        &token)))                                     // Generated token
    {
        while (!cancelWait)
        {
            Sleep(100);
        }

        gameInput->UnregisterCallback(token);
    }
}

요구 사항

헤더: GameInput.h

라이브러리: gameinput.lib

지원되는 플랫폼: Windows

참고 항목

입력 API 개요
IGameInput
IGameInput::RegisterDeviceCallback
IGameInput::RegisterReadingCallback
IGameInput::RegisterSystemButtonCallback