Sdl 2 SDL2:SDL_GetMouseState()是线程安全的吗?

Sdl 2 SDL2:SDL_GetMouseState()是线程安全的吗?,sdl-2,Sdl 2,SDL\u GetMouseState函数是线程安全的吗 在SDL_GetMouseState的示例中,使用了已知线程不安全的SDL_PumpEvents。如果SDL\u GetMouseState是线程安全的,我是否必须使用线程不安全的SDL\u PumpeEvents使其正常工作?此函数的代码是: Uint32 SDL_GetMouseState(int *x, int *y) { SDL_Mouse *mouse = SDL_GetMouse(); if (x) {

SDL\u GetMouseState
函数是线程安全的吗


SDL_GetMouseState
的示例中,使用了已知线程不安全的
SDL_PumpEvents
。如果
SDL\u GetMouseState
是线程安全的,我是否必须使用线程不安全的
SDL\u PumpeEvents
使其正常工作?

此函数的代码是:

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;
}
SDL_GetMouse
只返回静态全局变量的地址。因此,它没有什么不安全的地方,但没有原子性

但是,事件是单独处理的。如果不处理事件,鼠标结构将不会更新,
SDL\u GetMouseState
将为您提供过时的值。文档明确指出,您应该仅在图形线程(初始化图形系统的线程)中调用
SDL_PumpEvents

最坏的情况是,当其他线程更新它时,您从SDL_GetMouseState读取值。您可以读取旧值、新值,甚至是两个值的混合(例如,x来自新值,y来自旧值)