SDL2: E 'SDL_GetMouseState () thread-safe?

voti
34

È SDL_GetMouseStatefilo funzionamento sicuro?

E nell'esempio di SDL_GetMouseState, la SDL_PumpEvents, che è noto per essere thread-pericoloso, viene utilizzato. Se SDL_GetMouseStateè thread-safe, devo usare SDL_PumpEvents, che è thread-non sicuro con esso per renderlo funzionante?

È pubblicato 25/01/2016 alle 20:20
dall'utente
In altre lingue...                            


1 risposte

voti
1

Il codice di questa funzione è:

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

E SDL_GetMousesolo restituisce l'indirizzo della variabile globale statica. Quindi, non c'è niente di pericoloso con esso, ma non v'è alcuna atomicità.

Tuttavia eventi vengono elaborati separatamente. Se non prcess eventi, la struttura del mouse non si aggiorna e SDL_GetMouseStatevi darà valori obsoleti. La documentazione afferma esplicitamente che si dovrebbe chiamare SDL_PumpEventssolo in discussione la grafica (quella che inizializzato sistema grafico).

Nella peggiore delle ipotesi è leggendo valli da SDL_GetMouseStatementre altro thread aggiorna. Si potrebbe leggere vecchio valore, nuovo valore, o anche un mix di due (per esempio x da nuovo ma y da vecchio).

Risposto il 26/01/2016 a 02:18
fonte dall'utente

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