SDL2: Ist SDL_GetMouseState () Thread-sicher?

stimmen
34

Ist SDL_GetMouseStateFunktion Thread - sicher?

Und in dem Beispiel der SDL_GetMouseState, das SDL_PumpEvents, von dem bekannt ist gewinde unsicher zu sein, verwendet wird. Wenn SDL_GetMouseStateThread-sicher ist, muss ich verwenden , SDL_PumpEventsdie mit ihm gewinde unsicher ist , es richtig zu machen arbeiten?

Veröffentlicht am 25/01/2016 um 20:20
vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Der Code dieser Funktion ist:

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

Und SDL_GetMousegerade zurück Adresse der statischen globalen Variablen. Daher gibt es nichts unsicher mit ihm, aber es gibt keine Unteilbarkeit.

Allerdings Ereignisse werden separat verarbeitet. Wenn Sie keine Ereignisse prcess, würde Mausstruktur nicht aktualisiert und SDL_GetMouseStatewerden Sie veraltete Werte geben. Dokumentation heißt es ausdrücklich , rufen Sie sollten SDL_PumpEventsnur in Grafiken Thread (das, das Grafiksystem initialisiert).

Im schlimmsten Fall ist das Lesen Sie vales aus , SDL_GetMouseStatewährend andere Thread aktualisiert sie. Sie könnten alten Wert, neuen Wert, oder auch eine Mischung aus zwei (zB x von neuen , aber y aus alten) lesen.

Beantwortet am 26/01/2016 um 02:18
quelle vom benutzer

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