IGameInput::UnregisterCallback (v2)

删除某一回调方法。 将不再调用该方法,并且您可以在 UnregisterCallback 完成后从回调函数删除资源。

语法

bool UnregisterCallback(
    GameInputCallbackToken callbackToken
);

参数

callbackToken _In_
类型:GameInputCallbackToken

要注销的回调函数的标记。 在使用 IGameInput::RegisterDeviceCallback 最初注册函数时生成。

返回值

类型:bool

如果已成功注销回调则返回 True。

备注

IGameInput::StopCallback 方法和 IGameInput::UnregisterCallback 方法稍有不同。 调用这两种方法中的任何一种都确保不会重新调度关联的回调。 但是,释放与回调 (关联的任何资源是不安全的,例如,卸载承载回调函数的 DLL) ,直到 UnregisterCallback 函数成功返回。 因此,无法从其已注册的回调函数中注销回调,尝试这样做将触发致命断言。 但是,从回调函数内取消某一回调是安全的。

以下 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

支持的平台: 窗户

另请参阅

输入 API 概述
IGameInput
IGameInput::RegisterDeviceCallback
IGameInput::RegisterReadingCallback
IGameInput::RegisterSystemButtonCallback