SDL2 调整大小事件进入错误的线程?

SDL2 resize event goes to wrong thread?

我使用 Python 3.5 的 SDL2,我有 2 个线程,每个线程都绘制到自己的 OpenGl window。

绘图顺利,所有鼠标和键盘事件都到达正确的线程。 只有当我调整其中一个 window 的大小时,调整大小事件才会出错 window.

这是我的部分代码:

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向右走window,打印正确的名字,但是SDL_WINDOWEVENT_RESIZED走错了,打印错误的名字。

有人知道是什么原因造成的吗? 每个 SDL window 只能从它自己的线程访问。

SDL 只制作一个事件队列。事件队列主要是线程安全的,但在逻辑上很难在多线程中使用它。只在一个线程中读取事件并通过其他一些东西向其他线程发送通知可能会更好。

至于 window 个事件,它们包含 windowID 个字段。您可以通过 SDL_GetWindowID 调用获得 window 的 ID。