De code van deze functie is:
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;
}
En SDL_GetMouse
geeft alleen het adres van statische globale variabele. Er is dus niets onveilig mee, maar er is geen atomiciteit.
Echter gebeurtenissen worden afzonderlijk verwerkt. Als u geen gebeurtenissen prcess, zou muis structuur niet werken en SDL_GetMouseState
zal u verouderde waarden geven. Documentatie expliciet moet je bellen SDL_PumpEvents
alleen in graphics thread (degene die grafische systeem geïnitialiseerd).
Worst case scenario is dat je leest vales uit SDL_GetMouseState
terwijl andere thread werkt het. Je kon oude waarde, nieuwe waarde, of zelfs een combinatie van twee (bijvoorbeeld x van nieuw, maar y van oud) te lezen.