Was ist der beste Weg, um Ereignisse mit SDL / C ++ zu behandeln?

8

Ich verwende SDL für die Ansichtsteile meines Spielprojekts. Und ich möchte wichtige Presseereignisse behandeln, ohne den Hauptthread zu unterbrechen. Also entschied ich mich, eine Endlosschleife in einem anderen Ansichts-Thread auszuführen, um alle Ereignisse abzufangen und den Haupt-Thread zu informieren. Ich bin mir jedoch nicht sicher, ob dies die beste Lösung ist, da dies zu einer Arbeitsbelastung führen und die Systemleistung beeinträchtigen kann. Gibt es einen besseren Weg, diese Art von Dingen zu tun? Danke.

    
Ertan 13.11.2010, 23:46
quelle

2 Antworten

7

Beschäftige dich nicht mit einem anderen Thread. Was ist der Sinn?

Was macht dein Haupt-Thread? Ich stelle mir so etwas vor:

  1. Logik aktualisieren
  2. Rendern
  3. Gehe zu 1

Wenn Sie nach (oder während des) Aktualisierungszyklus eine Eingabe erhalten, müssen Sie bis zum nächsten Aktualisierungszyklus warten, bevor Sie die Effekte sehen. Das gleiche gilt für das Rendering. Sie können auch vor dem Aktualisierungszyklus nur nach Eingaben suchen und alles einthreadig machen.

  1. Eingabe
  2. Logik aktualisieren
  3. Rendern
  4. Gehe zu 1

Multithreading erhält hier nichts und erhöht nur die Komplexität.

Weitere Informationen finden Sie in Christer Ericssons Blog-Post zur Eingabe-Latenz (er ist der Director of Technology für die Team, das Gott des Krieges macht).

    
Peter Alexander 13.11.2010, 23:59
quelle
5
  

Und ich möchte wichtige Presseereignisse behandeln, ohne den Hauptthread zu unterbrechen.

SDL ist inhärent kein Interrupt oder ereignisgesteuertes Framework. IO tritt auf, indem Ereignisse aus der Ereigniswarteschlange durch Aufrufen von SDL_WaitEvent oder SDL_PollEvent gelesen werden. Dies muss im Thread " main " geschehen, der SDL_SetVideoMode aufgerufen hat.

Das soll nicht heißen, dass Sie nicht mehrere Threads verwenden können, und dafür gibt es gute Gründe. So kann es beispielsweise die Netzwerkkommunikation vereinfachen, wenn es nicht auf die SDL-Ereignisschleife angewiesen ist. Wenn die -Simulation in einem separaten Thread ausgeführt werden soll, können Informationen durch synchronisierte gemeinsame Objekte übertragen werden. Insbesondere können Sie Ereignisse immer sicher aus jedem Thread in die SDL-Ereigniswarteschlange einfügen.

    
quelle

Tags und Links