Threading - jackgris/wikiLibGDX_es GitHub Wiki

4.6 Threading

Todos los métodos de ApplicationListener son llamados en el mismo hilo. Este hilo es el hilo que maneja la UI en el que se pueden realizar llamadas a OpenGL. Para la mayoría de los juegos es suficiente para aplicar ambas actualizaciones las de la lógica y renderizado en el ApplicationListener.render(), y en el hilo de la UI.

Todas las operaciones con gráficos que implican directamente a OpenGL necesitan ser ejecutados en el hilo de la UI. Si lo hace, en un hilo diferente puede tener comportamiento indefinido como resultado. Esto es debido al contexto de OpenGL que sólo debe estar activo en el hilo de la UI. Hacer que el actual contexto este en otro hilo tiene sus problemas en una gran cantidad de dispositivos Android, por lo que no es compatible.

Para pasar datos al hilo de la UI desde otro hilo, se recomienda utilizar Application.postRunnable(). Esto ejecutará el código en el Runnable en el hilo de la UI en el siguiente frame, antes de que se llame a ApplicationListener.render().

new Thread(new Runnable() {
   @Override
   public void run() {
      // do something important here, asynchronously to the rendering thread
      final Result result = createResult();
      // post a Runnable to the rendering thread that processes the result
      Gdx.app.postRunnable(new Runnable() {
         @Override
         public void run() {
            // process the result, e.g. add it to an Array<Result> field of the ApplicationListener.
            results.add(result);
         }
      });
   }
}).start();

Qué clases de libgdx son Thread-safe?

No hay clases en libgdx que sean thread-safe a menos que estén marcadas explícitamente como seguras para el uso de hilos en la documentación de la clase.

Nunca se debe llevar a cabo operaciones de hilos múltiples en cualquier cosa que tenga gráficos o audio relacionados, por ejemplo, utilizar componentes de scene2D desde varios hilos.

HTML5

JavaScript es inherentemente un único hilo. Como tal, el threading es imposible.Web Worker puede ser una opción en el futuro, sin embargo, los datos se pasan a través del paso de mensajes entre hilos. Java utiliza diferentes primitivas y mecanismos de threading, portar código threading para Web Workers no será sencillo.

Enlaces

⚠️ **GitHub.com Fallback** ⚠️