Kód této funkce je:
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;
}
A SDL_GetMouse
právě vrátí adresu statické globální proměnné. Z toho důvodu není nic nebezpečné s ním, ale není tam žádný atomicity.
Události však jsou zpracovávány odděleně. Pokud nemáte prcess události, struktura myš nebude aktualizovat a SDL_GetMouseState
dá vám zastaralé hodnoty. Dokumentace výslovně uvádí, měli byste zavolat SDL_PumpEvents
pouze v grafickém závitu (ten, který inicializované grafický systém).
Nejhorším případě je to čteš Valeš z SDL_GetMouseState
zatímco druhá nit ji aktualizuje. Dalo by se číst starou hodnotu, novou hodnotu, nebo dokonce kombinace obou (např x od nové, ale y z starý).