View Full Version : [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... :)
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 ;)
Originariamente inviato da VICIUS
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 ;)
Ok, ma così facendo:
- 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?...
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
end.is.forever
05-07-2004, 13:18
Potresti usare un Timer e ogni volta passargli un TimerTask che fa una sleep per 200ms
Ciao.
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?
Originariamente inviato da bizzu
e quindi viene messo in pausa anche il refresh.
Quindi mi sa che devo rendere un Thread la classe Agente...
penso che la tua analisi sia valida ;)
end.is.forever
05-07-2004, 23:50
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.
Tutto ok, ho creato un altro thread e adesso funziona.
Grazie a tutti x i consigli! ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.