SDL2: Este SDL_GetMouseState () fir-în condiții de siguranță?

voturi
34

Este SDL_GetMouseStatefir funcția de siguranță?

Și în exemplul ELE SDL_GetMouseState, SDL_PumpEventscare este cunoscut a fi fire nesigur, este utilizat. În cazul în care SDL_GetMouseStateeste thread - safe, nu trebuie sa folosesc SDL_PumpEventscare este fir de nesigur cu ea pentru a face de lucru corect?

Întrebat 25/01/2016 la 20:20
de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
1

Codul acestei funcții este:

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_GetMousedoar se întoarce adresa variabile globale statice. Prin urmare, nu este nimic nesigur cu ea, dar nu există nici o Atomicitate.

Cu toate acestea evenimentele sunt procesate separat. Dacă nu prcess evenimente, structura mouse - ul nu ar actualiza și SDL_GetMouseStatevă va da valori depășite. Documentația menționează în mod explicit ar trebui să apel SDL_PumpEventsnumai în fir grafic (cel care inițializează sistemul grafic).

Scenariul cel mai rău caz este citești Văi din SDL_GetMouseStatetimp ce alt fir actualizează. Ai putea citi valoarea vechi, valoare nouă, sau chiar un amestec de două ( de exemplu , x din nou , dar de la y vechi).

Publicat 26/01/2016 la 02:18
sursa de către utilizator

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