SDL2: Czy SDL_GetMouseState () wątku bezpieczny?

głosy
34

Czy SDL_GetMouseStatewątek funkcja jest bezpieczne?

I na przykład SDL_GetMouseStateThe SDL_PumpEvents, który jest znany jako nitki niebezpieczny, jest wykorzystywana. Jeśli SDL_GetMouseStatejest bezpieczny wątku, muszę użyć SDL_PumpEventsco jest niebezpieczne nitki z nim zrobić to właściwie działa?

Utwórz 25/01/2016 o 20:20
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
1

Kod tej funkcji jest następująca:

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_GetMousepo prostu zwraca adres zmiennej statycznej globalnej. Stąd, nie ma nic niebezpieczne z nim, ale nie ma niepodzielność.

Jednak zdarzenia są przetwarzane oddzielnie. Jeśli nie prcess wydarzenia, struktura mysz nie będzie aktualizować i SDL_GetMouseStatedaje wartości nieaktualne. Dokumentacja wyraźnie stwierdza, należy zadzwonić SDL_PumpEventstylko w wątku graficznej (ten, który inicjalizacji układu graficznego).

Najgorszy scenariusz jest czytasz Vales od SDL_GetMouseStatenatomiast inny wątek aktualizuje go. Można odczytać wartość starą, nową wartość, a nawet połączenie dwóch (np x od nowa, ale y od życia).

Odpowiedział 26/01/2016 o 02:18
źródło użytkownik

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