2016-12-06 3 views
0

Ich benutze SDL2 von Python 3.5 und ich habe 2 Threads, jede Zeichnung zu ihrem eigenen OpenGl-Fenster.SDL2 resize Ereignis geht zu falschem Thread?

Zeichnung geht in Ordnung, und alle Maus- und Tastaturereignisse im rechten Faden ankommen. Nur wenn ich die Größe eines der Fenster ändere, geht das Resize Event in das falsche Fenster.

Hier ist ein Teil meines Code:

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) 

Die SDL_MOUSEBUTTONDOWN in das rechten Fenster geht, die richtigen Namen drucken, aber die SDL_WINDOWEVENT_RESIZED geht an den falschen, den falschen Namen drucken.

jemand eine Idee, was könnte die Ursache sein? Jedes SDL-Fenster wird nur von einem eigenen Thread aus angefahren.

+2

Es gibt nur eine Ereigniswarteschlange. Fenster kann durch 'event.window.windowID' bestimmt werden. – keltar

+0

Das hilft sehr, danke! Wenn Sie Ihren Kommentar zu einer Antwort promoten, kann ich es Ihnen gutschreiben. –

Antwort

2

SDL macht nur eine Ereignis-Warteschlange. Die Ereigniswarteschlange ist größtenteils Thread-sicher, aber es wäre logisch schwierig, sie in mehreren Threads zu verwenden. Es ist wahrscheinlich besser, Ereignisse in nur einem Thread zu lesen und Benachrichtigungen über andere Dinge an andere Threads zu senden.

Wie für Fenster Ereignisse enthalten sie windowID Feld. Sie können ID eines Fensters mit SDL_GetWindowID Anruf erhalten.

Verwandte Themen