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来自旧值)