Gå til innhold

Noen forskjell på disse (multithreading) codene?


Anbefalte innlegg

Er det noen forskjell på disse codene imåten dem oppfører seg? Hvilken ville du brukt - og hvorfor isåfall?

Takker for relevante svar! :thumbup:

 

Code1:

	public void run() {
	while (true) {
		try {
			if (!paused) {
				EventQueue.invokeAndWait(new Runnable() {
					public void run() {
						try {
							for (int i = 0; i < game.stepDelay; i++) {
								sleep(10);
								game.getGUI().repaint();
							}
							moveRandomly();
						} catch (InterruptedException e) {
							System.err.println("run() error");
						}
					}

				});

			} else {
				sleep(10);
				game.getGUI().repaint();
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

Code2 (se bortifra "//"'ene...)

//	public void run(){
//		while(true){
//			try {
//				if(!paused)
//				{
//					/** update itself after each player move
//					 * no point in updating the gui every 10 ms, if the players 
//					 * are moving every second*/
//					for(int i=0;i<game.stepDelay;i++)
//					{
//						/** The reason for sleeping is giving the threads other time to react*/
//						sleep(10); 
//						game.getGUI().repaint();
//					}
//					moveRandomly();
//				}
//				else{
//					sleep(10);
//					game.getGUI().repaint();
//				}
//			} catch (InterruptedException e) {
//				e.printStackTrace();
//			}
//		}
//	}

Lenke til kommentar
Videoannonse
Annonse

Forskjellen ser ut til å være om du skal kjøre deler av koden direkte, eller om du skal få "gui-tråden" til å gjøre det. Grunnen til å eventuelt kjøre noe i gui-tråden er at swing komponenter ikke er thread-safe. Så alle kall mot swing komponenter må skje fra gui-tråden. Du bør uansett ikke kjøre alt det der fra gui-tråden. Regner med det er en grunn til at du har det i en egen tråd.

 

Spørsmålet er om repaint metoden må kalles fra gui-tråden for å unngå problemer.

 

Fungerer begge?

Blir GUIet tregt når du bruker den øverste?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...