SDL2: Er SDL_GetMouseState () tråd-safe?

stemmer
34

Er SDL_GetMouseStatefunksjon tråd trygt?

Og i eksempelet med SDL_GetMouseStateden SDL_PumpEvents, som er kjent for å være tråd-usikre, blir brukt. Hvis SDL_GetMouseStateer tråd-safe, må jeg bruke SDL_PumpEventssom er tråd usikre med det å gjøre det som fungerer?

Publisert på 25/01/2016 klokken 20:20
bruker
På andre språk...                            


1 svar

stemmer
1

Koden til denne funksjonen er:

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;
}

Og SDL_GetMousebare returnerer adressen til statisk global variabel. Derfor er det ikke noe usikre med det, men det er ingen atomicity.

Imidlertid hendelsene blir behandlet separat. Hvis du ikke prcess hendelser, ville mus struktur ikke oppdatere og SDL_GetMouseStatevil gi deg utdaterte verdier. Dokumentasjon sier eksplisitt at du skal ringe SDL_PumpEventsbare i grafikk tråden (den som initialisert grafikk system).

Worst case scenario er at du leser Vales fra SDL_GetMouseStatemens andre tråden oppdaterer den. Du kan lese gamle verdien, ny verdi, eller en blanding av to (f.eks x fra ny, men y fra gamle).

Svarte 26/01/2016 kl. 02:18
kilden bruker

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