次の方法で共有


IGameInput::UnregisterCallback

コールバック メソッドを削除します。 メソッドは呼び出されなくなり、UnregisterCallback の完了後にコールバック関数からリソースを削除することができます。

構文

bool UnregisterCallback(  
         GameInputCallbackToken callbackToken,  
         uint64_t timeoutInMicroseconds  
)  

パラメーター

callbackToken _In_
型: GameInputCallbackToken

登録解除するコールバック関数のトークン。 関数が IGameInput::RegisterDeviceCallback で最初に登録されたときに生成されます。

timeoutInMicroseconds _In_
型: uint64_t

コールバックが完了して登録解除できるのを待機する時間の長さ。

戻り値

型: bool

コールバックが正常に登録解除された場合は true。 false は、進行中のコールバックが戻るのを待機中にタイムアウトになったことを示します。 false の戻り値の場合、新しいコールバックはディスパッチされず、既に進行中のコールバックは引き続き実行されます。

解説

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, 5000); 
    } 
} 

要件

ヘッダー: GameInput.h

ライブラリ: xgameruntime.lib

サポートされているプラットフォーム: Windows、Xbox One ファミリー本体、Xbox Series 本体

関連項目

入力 API の概要
IGameInput
IGameInput::RegisterDeviceCallback
IGameInput::RegisterReadingCallback
IGameInput::RegistersystemButtonCallback