Skip to main content
Aunque GameInput está diseñado principalmente en torno a un modelo de sondeo, existen casos en los que es mejor notificar a las aplicaciones de forma asincrónica. Para admitir esto, la interfaz IGameInput expone algunos métodos para registrar funciones de devolución de llamada que se invocan cuando se producen determinados eventos de interés. Internamente, GameInput serializa el envío de las devoluciones de llamada de modo que solo se ejecute una devolución de llamada a la vez. GameInput garantiza que las devoluciones de llamada se envían en orden cronológico. Estas garantías simplifican el código que una aplicación necesita escribir en sus funciones de devolución de llamada. GameInput permite un máximo de 64 devoluciones de llamada registradas en cualquier momento, independientemente del tipo. Las devoluciones de llamada se envían desde un subproceso de trabajo interno de GameInput. Para obtener más información sobre cómo funciona esto, junto con las opciones para programar manualmente este trabajo, consulte Colas de trabajo de GameInput.

Devoluciones de llamada de dispositivo

Las devoluciones de llamada de dispositivo proporcionan una manera de que las aplicaciones sepan cuándo cambia el estado de los dispositivos de entrada, como se muestra en la sintaxis siguiente. Lo más habitual es que se usen para detectar cuándo se conectan y desconectan los dispositivos, pero otros cambios de estado también pueden ser de interés.
Las devoluciones de llamada de dispositivo se pueden registrar con varios filtros opcionales. Esto incluye el filtrado a dispositivos que producen tipos específicos de entrada, el filtrado a cambios de estado específicos, el filtrado a un dispositivo específico o cualquier combinación de esos filtros. Por ejemplo, una aplicación puede configurar una devolución de llamada para que le notifique cuando un dispositivo se ha desconectado del sistema. Además de los cambios de estado del dispositivo, el método RegisterDeviceCallback se puede usar para la enumeración de dispositivos. El parámetro enumerationKind toma un valor de la enumeración GameInputEnumerationKind, que indica si la enumeración debe realizarse como parte del registro de la devolución de llamada y, en tal caso, si la enumeración debe realizarse de forma bloqueante o asincrónica. Combinar la enumeración de dispositivos con los cambios de estado posteriores en una única operación atómica evita las condiciones de carrera que muchas aplicaciones sufren de forma involuntaria en su código de entrada.

Devoluciones de llamada de lectura

Mediante las devoluciones de llamada de lectura, las aplicaciones pueden recibir una notificación cada vez que llegan nuevas lecturas a la secuencia de entrada, como se muestra en la sintaxis siguiente. Aunque muchas aplicaciones encontrarán que el sondeo de la entrada es mejor, existen situaciones en las que la entrada controlada por eventos puede ser preferible. Por ejemplo, la interfaz de usuario del menú principal de un juego podría adaptarse mejor a la entrada basada en eventos. Otro ejemplo es una interfaz de usuario de asignación de entrada que debe esperar la entrada después de pedirle al usuario su selección.
Al igual que las devoluciones de llamada de dispositivo, las devoluciones de llamada de lectura se pueden registrar con varios filtros opcionales. Esto es especialmente útil para las devoluciones de llamada de lectura, ya que las aplicaciones pueden estar interesadas en un subconjunto específico de lecturas de la secuencia de entrada. El método RegisterReadingCallback permite filtrar a dispositivos que producen tipos específicos de entrada o filtrar a la entrada de un dispositivo específico. Las aplicaciones también pueden especificar un filtro para los valores de entrada analógicos (como los sticks de un mando) que requiera una cantidad mínima de movimiento antes de que se active la devolución de llamada. Esto puede reducir drásticamente la frecuencia de las devoluciones de llamada cuando no se requieren cambios de estado analógicos de alta resolución. Un buen ejemplo de esto es la implementación de una interfaz de usuario de asignación de entrada cuando se espera un cambio de entrada después de pedirle al usuario su selección.

Anulación del registro de devoluciones de llamada

Después de registrar correctamente una devolución de llamada, la aplicación debe garantizar que todos los recursos necesarios para ejecutar la devolución de llamada sigan siendo válidos. Esto incluye tanto los recursos consumidos por el código de la devolución de llamada como la propia función de devolución de llamada, por ejemplo, si la función de devolución de llamada está hospedada en un archivo DLL que la aplicación carga y descarga a petición. Para reclamar de forma segura estos recursos, una aplicación debe primero anular el registro de la devolución de llamada pasando el token que recibió del método Register*Callback al método UnregisterCallback. Si la devolución de llamada se está ejecutando cuando se llama a este método, se bloquea hasta que la devolución de llamada termina de ejecutarse. Como resultado, una devolución de llamada no puede anular su propio registro desde su propia función de devolución de llamada. Las devoluciones de llamada también se pueden detener llamando al método StopCallback. Esto no anula el registro de la devolución de llamada, pero garantiza que no se vuelva a llamar. Como el registro de la devolución de llamada no se anula, este método es seguro para llamarlo desde la propia función de devolución de llamada. Termina de ejecutar la devolución de llamada actual, pero no la vuelve a llamar. El registro de las devoluciones de llamada debe anularse en algún momento, ya que solo se permiten 64 devoluciones de llamada en cualquier momento.

Documentación de referencia de la API

Consulte también

Aspectos básicos de GameInput Temas avanzados de GameInput Referencia de la API de entrada
Última modificación el 28 de agosto de 2026