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