Kod tej funkcji jest następująca:
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;
}
I SDL_GetMouse
po prostu zwraca adres zmiennej statycznej globalnej. Stąd, nie ma nic niebezpieczne z nim, ale nie ma niepodzielność.
Jednak zdarzenia są przetwarzane oddzielnie. Jeśli nie prcess wydarzenia, struktura mysz nie będzie aktualizować i SDL_GetMouseState
daje wartości nieaktualne. Dokumentacja wyraźnie stwierdza, należy zadzwonić SDL_PumpEvents
tylko w wątku graficznej (ten, który inicjalizacji układu graficznego).
Najgorszy scenariusz jest czytasz Vales od SDL_GetMouseState
natomiast inny wątek aktualizuje go. Można odczytać wartość starą, nową wartość, a nawet połączenie dwóch (np x od nowa, ale y od życia).