SDL2 resize事件进入错误的线程?

时间:2016-12-06 08:32:36

标签: python sdl-2 pysdl2

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

绘图很好,所有鼠标和键盘事件都在正确的线程中到达。 只有当我调整其中一个窗口时,resize事件才会进入错误的窗口。

这是我的代码的一部分:

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转到错误的名称,打印错误的名称。

任何人都知道是什么原因引起的? 每个SDL窗口仅从其自己的线程接近。

1 个答案:

答案 0 :(得分:2)

SDL只生成一个事件队列。事件队列主要是线程安全的,但在多线程中使用它在逻辑上很难。最好只在一个线程中读取事件,并通过其他一些事情向其他线程发送通知。

对于窗口事件,它们包含windowID字段。您可以通过SDL_GetWindowID来获取窗口的ID。