|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2003
Città: Rimini
Messaggi: 2279
|
[java] Rallentare un algoritmo
Sto creando un'applet che risolve labirinti; contiene una classe Maze che rappresenta il labirinto (e contiene anche la struttura dati che lo rappresenta), e una Agente che contiene i metodi per la risoluzione.
Funziona tutto benissimo, ma vorrei rallentare l'algoritmo di risoluzione per mostrare graficamente il processo (com'è ora, lo risolve istantaneamente e la soluzione appare tutta subito). Ho provato a chiamare Thread.sleep(200) tra un passo e l'altro della risoluzione, ma l'applet si impalla, molto probabilmente perché la classe Agente non è un Thread... C'è un altro modo oppure devo per forza creare un thread? Thanx...
__________________
Gigabyte 965P-DS3 ¤ E6600@400*8 ¤ Scythe Ninja Plus Rev.B ¤ Ram 4GB ¤ HD SSD Crucial M4 128GB
Gainward 4850 Golden Sample ¤ Antec NEO 550HE ¤ CM Centurion 534 ¤ Dell Ultrasharp U2312HM Notebook Asus N551JW ¤ i7-4750HQ ¤ nVidia 960M 4GB ¤ 16GB DDR3 ¤ SSD Intel 850EVO 500GB |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
potresti inserire qua e la dei cicli for nel agente.
anche se hai un pc veloce fare 1.000.000 iterazioni non è perniente facile ciao |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: May 2003
Città: Rimini
Messaggi: 2279
|
Quote:
- la velocità cambia da pc a pc; - la jvm è una sola e se hai altri applicativi java devono tutti aspettare quel ciclo. Il busy waiting lo vorrei evitare come la peste... qualcun'altro sa come fare?...
__________________
Gigabyte 965P-DS3 ¤ E6600@400*8 ¤ Scythe Ninja Plus Rev.B ¤ Ram 4GB ¤ HD SSD Crucial M4 128GB
Gainward 4850 Golden Sample ¤ Antec NEO 550HE ¤ CM Centurion 534 ¤ Dell Ultrasharp U2312HM Notebook Asus N551JW ¤ i7-4750HQ ¤ nVidia 960M 4GB ¤ 16GB DDR3 ¤ SSD Intel 850EVO 500GB |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
|
non capisco come mai si impalla la applet
la sleep di solito funziona, basta metterla in un try catch... i cicli for non vanno bene per due motivi: il primo è la differenza di velocità e il secondo è lo spreco ingiustificato di risorse di calcolo che potrebbero venire utili ad altre applicazioni |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2004
Messaggi: 1578
|
Potresti usare un Timer e ogni volta passargli un TimerTask che fa una sleep per 200ms
Ciao. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2003
Città: Rimini
Messaggi: 2279
|
Penso di aver capito dove sta il problema.
Non è che l'applet si impalla; ho aspettato un po' di tempo e alla fine l'algoritmo termina, ma nel frattempo non fa il refresh. Quindi, molto probabilmente, quando chiamo il Thread.sleep questo viene eseguito sul thread corrente (cioè l'applet, visto che ho reso essa stessa Runnable), e quindi viene messo in pausa anche il refresh. Quindi mi sa che devo rendere un Thread la classe Agente... x end.is.forever: Non conosco questo metodo: potresti per favore postare qualche riga di codice come esempio?
__________________
Gigabyte 965P-DS3 ¤ E6600@400*8 ¤ Scythe Ninja Plus Rev.B ¤ Ram 4GB ¤ HD SSD Crucial M4 128GB
Gainward 4850 Golden Sample ¤ Antec NEO 550HE ¤ CM Centurion 534 ¤ Dell Ultrasharp U2312HM Notebook Asus N551JW ¤ i7-4750HQ ¤ nVidia 960M 4GB ¤ 16GB DDR3 ¤ SSD Intel 850EVO 500GB |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
penso che la tua analisi sia valida |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2004
Messaggi: 1578
|
No scusa, con il Timer non cambierebbe niente.
Il tuo problema e' che (a quanto ho capito) gestisci interfaccia grafica e algoritmo nello stesso Thread. Purtroppo non c'e nessuna soluzione tranne che usare due Thread separati, o almeno io ho sempre fatto in questo modo. Ciao. |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2003
Città: Rimini
Messaggi: 2279
|
Tutto ok, ho creato un altro thread e adesso funziona.
Grazie a tutti x i consigli!
__________________
Gigabyte 965P-DS3 ¤ E6600@400*8 ¤ Scythe Ninja Plus Rev.B ¤ Ram 4GB ¤ HD SSD Crucial M4 128GB
Gainward 4850 Golden Sample ¤ Antec NEO 550HE ¤ CM Centurion 534 ¤ Dell Ultrasharp U2312HM Notebook Asus N551JW ¤ i7-4750HQ ¤ nVidia 960M 4GB ¤ 16GB DDR3 ¤ SSD Intel 850EVO 500GB |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:23.



















