Threads
Hola otra vez,
Soy el del simulador gráfico. Cuando pauso el thread las bolas se quedan quietas pero cuando vuelvo a activar el thread las bolas que habían sobre la cinta se siguen quedando quietas y me aparecen otras nuevas desde el inicio.
Te comento como gestiono la salida de las bolas. Obteniendo los datos de una BDD MySQL y una serie de cálculos obtengo una cadencia en las bolas y las bolas que debe haber sobre la cinta, luego me creo un vector de bolas de dimension igual al numero de bolas sobre la cinta +1. Una cosa es el refresco del thread y otra la frecuencia con la que saco una bola, esto lo consigo con un temporizador.
Lo que tu has llamado cinta transportadora, yo lo había llamado thProceso, y lo que me activa las bolas lo he llamado Proceso (es donde se encuentra el temporizador).
Así que tengo;
-------- CLASE PROCESO -----------------
public Proceso(..){..
num_bolas=(int) (long_pixeles / pixels_entre_bolas)+1;
ball=new Bola[num_bolas];
for(int j=0;j ball[j]=new Bola(radioBolita);
ball[j].coordX=-1;
ball[j].coordY=-1;
}
iniciarThread(); // me inicia el thread que desplaza las bolas
ejecutaTemporizador(); //cada cierto tiempo me activa una bola
}
-------- CLASE THPROCESO -----------------
public thProceso(..){}
public void run(){
while(th1!=null){
synchronized(this){
if(estado_thread==EN_EJECUCION){
// una serie de condiciones para que se desplacen en cualquier direccion
}else{
// no hago nada
}
try {
Thread.sleep(tiempo_thread_milis);
} catch (Exception e) {}
}
}
}
---------------------------------------------------------------
¿Le ves alguna pega a esta forma de pensarlo?, ¿Se te ocurre algo mejor?
¿Por qué crees que suceda lo que te he comentado anteriormente?
Venga, muchas gracias!
Soy el del simulador gráfico. Cuando pauso el thread las bolas se quedan quietas pero cuando vuelvo a activar el thread las bolas que habían sobre la cinta se siguen quedando quietas y me aparecen otras nuevas desde el inicio.
Te comento como gestiono la salida de las bolas. Obteniendo los datos de una BDD MySQL y una serie de cálculos obtengo una cadencia en las bolas y las bolas que debe haber sobre la cinta, luego me creo un vector de bolas de dimension igual al numero de bolas sobre la cinta +1. Una cosa es el refresco del thread y otra la frecuencia con la que saco una bola, esto lo consigo con un temporizador.
Lo que tu has llamado cinta transportadora, yo lo había llamado thProceso, y lo que me activa las bolas lo he llamado Proceso (es donde se encuentra el temporizador).
Así que tengo;
-------- CLASE PROCESO -----------------
public Proceso(..){..
num_bolas=(int) (long_pixeles / pixels_entre_bolas)+1;
ball=new Bola[num_bolas];
for(int j=0;j ball[j]=new Bola(radioBolita);
ball[j].coordX=-1;
ball[j].coordY=-1;
}
iniciarThread(); // me inicia el thread que desplaza las bolas
ejecutaTemporizador(); //cada cierto tiempo me activa una bola
}
-------- CLASE THPROCESO -----------------
public thProceso(..){}
public void run(){
while(th1!=null){
synchronized(this){
if(estado_thread==EN_EJECUCION){
// una serie de condiciones para que se desplacen en cualquier direccion
}else{
// no hago nada
}
try {
Thread.sleep(tiempo_thread_milis);
} catch (Exception e) {}
}
}
}
---------------------------------------------------------------
¿Le ves alguna pega a esta forma de pensarlo?, ¿Se te ocurre algo mejor?
¿Por qué crees que suceda lo que te he comentado anteriormente?
Venga, muchas gracias!
1 respuesta
Respuesta de krlosnow
1