El código de esta función es:
Uint32
SDL_GetMouseState(int *x, int *y)
{
SDL_Mouse *mouse = SDL_GetMouse();
if (x) {
*x = mouse->x;
}
if (y) {
*y = mouse->y;
}
return mouse->buttonstate;
}
Y SDL_GetMouse
sólo devuelve la dirección de la variable global estática. Por lo tanto, no hay nada insegura con ella, pero no hay atomicidad.
Sin embargo eventos se procesan por separado. Si no prcess eventos, estructura de ratón no actualizaría y SDL_GetMouseState
le dará los valores obsoletos. Documentación indica explícitamente debe llamar SDL_PumpEvents
sólo en hilo de gráficos (el que inicializar sistema de gráficos).
El peor escenario es que la lectura de valles SDL_GetMouseState
, mientras que otro hilo lo actualiza. Se podía leer el valor de edad, nuevo valor, o incluso una mezcla de dos (por ejemplo x de nuevo, pero ya partir de edad).