SDL2: Is SDL_GetMouseState () thread-safe?

stemmen
34

Is SDL_GetMouseStatefunctie thread safe?

En in het voorbeeld van SDL_GetMouseStatede SDL_PumpEvents, waarvan bekend is dat draadachtige onveilig wordt gebruikt. Als SDL_GetMouseStateis thread-safe, moet ik gebruiken SDL_PumpEventsdie draad-onveilig met het te laten goed werkt?

De vraag is gesteld op 25/01/2016 om 20:20
user
In andere talen...                            


1 antwoorden

stemmen
1

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_GetMousegeeft 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_GetMouseStatezal u verouderde waarden geven. Documentatie expliciet moet je bellen SDL_PumpEventsalleen in graphics thread (degene die grafische systeem geïnitialiseerd).

Worst case scenario is dat je leest vales uit SDL_GetMouseStateterwijl 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.

antwoordde op 26/01/2016 om 02:18
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more