SDL2 resize事件进入错误线程?

2024-04-20 02:57:21 发布

您现在位置:Python中文网/ 问答频道 /正文

从Python和OpenGl的线程中,每个线程都有自己的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窗口只能从它自己的线程访问。在


Tags: selfeventfalseiftype错误事件window
1条回答
网友
1楼 · 发布于 2024-04-20 02:57:21

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

至于窗口事件,它们包含windowID字段。您可以使用SDL_GetWindowID调用获取窗口的ID。在

相关问题 更多 >