i使用python 3.5的sdl2,我有2个线程,每个绘制到他们自己的OpenGL窗口。
绘图很好,所有鼠标和键盘事件都到达正确的线程。只有当我调整一个窗口的大小时,调整大小事件才能输入错误的窗口。
这是我的代码的一部分:
def pollEvent (self):
event = s2.SDL_Event ()
if s2.SDL_PollEvent (ct.byref (event)):
if event.type == s2.SDL_QUIT:
self.running = False
elif event.type == s2.SDL_WINDOWEVENT:
if event.window.event == s2.SDL_WINDOWEVENT_RESIZED:
print (111, self.name, 222)
self.event = resizeEvent
self.width = event.window.data1
self.height = event.window.data2
self.reshape ()
elif event.window.event == s2.SDL_WINDOWEVENT_CLOSE:
self.running = False
self.renderDisplayList ()
elif event.type == s2.SDL_MOUSEBUTTONDOWN:
print (222, self.name, 333)
sdl_mousebuttondown转到右窗口,打印正确的名称,但是sdl_windowevent_resized to to the错误的名称,打印错误的名称。
有人知道是什么原因引起的?每个SDL窗口仅从其自己的线程接近。
sdl仅制作一个事件队列。事件队列主要是线程安全,但是在逻辑上很难在多个线程中使用它。最好仅在一个线程中读取事件,然后通过其他某些内容将通知发送到其他线程。
至于窗口事件,它们包含windowID
字段。您可以使用SDL_GetWindowID
调用。