SDL2: Az SDL_GetMouseState () szálbiztosak?

szavazat
34

Van SDL_GetMouseStatefunkció menet biztonságos?

És a példáját SDL_GetMouseState, a SDL_PumpEvents, amelyről ismert, hogy menet-nem biztonságos, alkalmazunk. Ha SDL_GetMouseStatethread-safe, akkor azt kell használni SDL_PumpEvents, ami nem biztonságos szálkezelés vele, hogy ez megfelelően működik?

A kérdést 25/01/2016 20:20
felhasználó
Más nyelveken...                            


1 válasz

szavazat
1

A kódex ezt a funkciót:

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

És SDL_GetMousemost vissza címe statikus globális változót. Ezért nincs semmi veszélyes vele, de nincs atomicitás.

Azonban eseményt dolgoz fel külön-külön. Ha nem prcess események egér struktúra nem frissíti, és SDL_GetMouseStatekapsz elavult értékeket. Dokumentáció kifejezetten kimondja, meg kell hívni SDL_PumpEventscsak grafikus menet (az egyik, hogy inicializált grafikus rendszer).

Legrosszabb esetben is olvasol vales származó SDL_GetMouseStatemíg másik szál frissíti. Lehet olvasni a régi érték, új érték, vagy akár egy mix két (pl x új, hanem a régi y).

Válaszolt 26/01/2016 02:18
a forrás felhasználó

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