Il codice di questa funzione è:
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;
}
E SDL_GetMouse
solo restituisce l'indirizzo della variabile globale statica. Quindi, non c'è niente di pericoloso con esso, ma non v'è alcuna atomicità.
Tuttavia eventi vengono elaborati separatamente. Se non prcess eventi, la struttura del mouse non si aggiorna e SDL_GetMouseState
vi darà valori obsoleti. La documentazione afferma esplicitamente che si dovrebbe chiamare SDL_PumpEvents
solo in discussione la grafica (quella che inizializzato sistema grafico).
Nella peggiore delle ipotesi è leggendo valli da SDL_GetMouseState
mentre altro thread aggiorna. Si potrebbe leggere vecchio valore, nuovo valore, o anche un mix di due (per esempio x da nuovo ma y da vecchio).