Estoy usando SDL para ver partes de mi proyecto de juego. Y quiero manejar eventos de pulsación de tecla sin interrumpir el hilo principal. Así que decidí ejecutar un ciclo infinito en otro hilo de vista para capturar cualquier evento e informar el hilo principal. Sin embargo, no estoy seguro de que este sea el mejor ya que esto puede causar una carga de trabajo y disminuir el rendimiento del sistema. ¿Hay alguna forma mejor de hacer este tipo de cosas? Gracias.¿Cuál es la mejor forma de manejar eventos con SDL/C++
Respuesta
No te molestes con otro hilo. ¿Cuál es el punto de?
¿Qué hace su hilo principal? Me imagino algo como esto:
- actualización de Logic
- Render
- Goto 1
Si recibe entrada después de (o durante) el ciclo de actualización, entonces usted tiene que esperar hasta la próxima actualización ciclo antes de ver los efectos. Lo mismo es cierto durante el renderizado. También debería verificar la entrada antes del ciclo de actualización y hacerlo todo individualmente.
- entrada
- actualización de Logic
- Render
- Goto 1
multihilo no gana nada aquí y sólo aumenta la complejidad.
Para una lectura adicional, echa un vistazo a Christer Ericson's blog post about input latency (él es el director de tecnología para el equipo que fabrica God of War).
Y deseo controlar los eventos de pulsación de tecla sin interrumpir el hilo principal.
SDL no es intrínsecamente un marco impulsado por interrupciones o eventos. IO ocurre leyendo eventos fuera de la cola del evento llamando al SDL_WaitEvent
o SDL_PollEvent
. Esto debe ocurrir en el hilo "principal", el que llamó SDL_SetVideoMode
.
Eso no quiere decir que no pueda usar varios hilos, y hay una buena justificación para hacerlo, por ejemplo, puede simplificar la comunicación de red si no tiene que depender del bucle de eventos de SDL. Si desea que la simulación se produzca en una secuencia separada, puede pasar información de un lado a otro a través de objetos compartidos sincronizados. En particular, siempre puede colocar eventos en la cola de eventos de SDL de forma segura desde cualquier hilo.
- 1. ¿Cuál es la forma correcta de manejar eventos en C++?
- 2. ¿Cuál es la mejor manera de manejar múltiples acciones?
- 3. ¿Cuál es la forma preferida de eventos de burbujas?
- 4. ¿Cuál es la mejor manera de manejar múltiples eventos clave en Javascript?
- 5. ¿Cuál es la mejor manera de manejar actualizaciones cuando el calendario sincroniza nuevos eventos?
- 6. ¿Cuál es la forma óptima de manejar imágenes rotas?
- 7. ¿Cuál es la mejor manera de manejar FBO en OpenGL?
- 8. ¿Cuál es la mejor forma de precompilar JSP con Ant
- 9. ¿Cuál es la mejor forma de usar NLog con MEF?
- 10. ¿Cuál es la mejor forma de manejar la recursión en smarty?
- 11. ¿Cuál es la mejor manera de manejar excepciones en Perl?
- 12. ¿Cuál es la (mejor) forma de manejar las fechas antes de Cristo en C# /. NET?
- 13. ¿Cuál es la mejor manera de manejar objects.get de Django?
- 14. ¿Cuál es la mejor práctica para manejar contraseñas en github?
- 15. ¿Cuál es la mejor forma de manejar esta transformación de secuencia en Clojure?
- 16. ¿Cuál es la mejor forma de manejar múltiples dependencias de objetos en C++?
- 17. ¿Cuál es la mejor forma de manejar excepciones de Net :: HTTP?
- 18. ¿Cuál es la mejor forma de manejar excepciones asíncronas de HttpWebRequest en C#?
- 19. ¿Cuál es la mejor forma de diseñar una clase C#?
- 20. JavaScriptSerializer.MaxJsonLength excedido. ¿Cuál es la mejor práctica para manejar esto?
- 21. ¿Cuál es la mejor forma de manejar dependencias circulares entre objetos?
- 22. ¿Cuál es la mejor forma de manejar versiones utilizando el protocolo JSON?
- 23. ¿Cuál es la mejor forma de manejar formularios repetitivos en MVC?
- 24. ¿Cuál es la mejor de las aplicaciones de eventos django?
- 25. ¿Cuál es la forma correcta de manejar el ciclo de vida de la actividad con OpenGL
- 26. ¿Cuál es la mejor manera de manejar entradas de dirección que pueden ser de varios países?
- 27. ¿Cuál es la mejor/más segura forma de reinstalar Homebrew?
- 28. ¿Cuál es la mejor forma de distribuir Lua y bibliotecas?
- 29. La mejor forma de hacer eventos asincrónicos en C#
- 30. ¿Cuál es la mejor forma de distribuir aplicaciones Java?
Eso y la entrada no es segura para subprocesos. Muchos tutoriales de SDL lo dicen explícitamente. – new123456