Odpalanie wątku w pętli.

0

Piszę z kolegami grę w Javie (libgdx) i potrzebuję uruchomić jedną metodę w nowym wątku co ok. 1/60s.

public void render() { // ta metoda jest automatycznie uruchamiana przez libgdx 

		server.start();   // <- w tej linijce wywala błąd (31 linijka)
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
		if (screen != null) screen.render(Gdx.graphics.getDeltaTime());
		while(Server.isAlive())
		{
		
		}
		
		
	}

Metoda run() w klasie Server

public void run() {	
	
			for(int i = 0 ; i < mainArray.size ; i++)
			{
				mainArray.get(i).step(Gdx.graphics.getDeltaTime());
			}	
			world.step(Gdx.graphics.getDeltaTime(), 6, 2);
		
	}

Exception in thread "LWJGL Application" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at com.xyz.abc.Engine.render(Engine.java:31)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:223)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)

0

Jestem amatorem, więc nie powiem ci dokładnie, gdzie leży problem, ani też to co powiem nie musi się zgadzać z rzeczywistym stanem rzeczy, jednak z tego co wiem libgdx nie zaleca wielowątkowości(bo z tego co pisałeś zamierzasz uruchomić jedną metode w nowym wątku) przy operacjach na grafice lub dźwięku. Nie mniej jednak nie powinno to wyrzucać wyjątku, więc nie jest to przyczyna ale rada, a błąd może pochodzić z błędnej implementacji/nadpisania metody, jednak nie mam co do tego pewności.

0

Jak najbardziej można pisać w LibGDX wielowątkowo, o ile robi się to z głową. Większość klas nie jest thread safe, a renderowanie w innym wątku powoduje undefined behaviour.

Co do tematu, tworzenie co klatkę nowego wątku by przelecieć po liście brzmi dla mnie jak próba przedwczesnej optymalizacji, w dodatku raczej słaba. Powiedz co wykonujesz przy każdej iteracji i dlaczego akurat w osobnym wątku?

1 użytkowników online, w tym zalogowanych: 0, gości: 1