SDL2: ¿Es SDL_GetMouseState () flujos seguros?

votos
34

Es SDL_GetMouseStateseguro para hilos función?

Y en el ejemplo de SDL_GetMouseState, la SDL_PumpEvents, que se sabe que es thread-inseguro, se utiliza. Si SDL_GetMouseStatees seguro para subprocesos, tengo que usar SDL_PumpEvents, que es hilo sin protección con él para hacer que funcione correctamente?

Publicado el 25/01/2016 a las 17:20
por usuario
En otros idiomas...                            


1 respuestas

votos
1

El código de esta función es:

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

Y SDL_GetMousesólo devuelve la dirección de la variable global estática. Por lo tanto, no hay nada insegura con ella, pero no hay atomicidad.

Sin embargo eventos se procesan por separado. Si no prcess eventos, estructura de ratón no actualizaría y SDL_GetMouseStatele dará los valores obsoletos. Documentación indica explícitamente debe llamar SDL_PumpEventssólo en hilo de gráficos (el que inicializar sistema de gráficos).

El peor escenario es que la lectura de valles SDL_GetMouseState, mientras que otro hilo lo actualiza. Se podía leer el valor de edad, nuevo valor, o incluso una mezcla de dos (por ejemplo x de nuevo, pero ya partir de edad).

Respondida el 25/01/2016 a las 23:18
fuente por usuario

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