PDA

View Full Version : [java] - utilizzo timer


prototipo88
06-08-2010, 01:06
ciao a tutti...
ho creato un array di timer statici assegnati al ID di un sensore wireless(NODI):
public static Timer timer2[]=new Timer[NODI];
e anche
public static Task task=new Task();
...
praticamente mi arrivano dei messaggi... io al primo messaggio faccio partire il timer associato al ID nodo del messaggio, e se entro X sec mi arriva un altro messaggio, allora faccio ripartire il timer, se no vado nel task, spedisco i messaggi che voglio io, e poi rifaccio ripartire il timer... il mio problema è che non so quasi niente di java...volevo sapere come fare a implementare questi timer e il loro funzionamento... grazie

questo è quello che ho fatto io... ma non credo sia giusto...


public void messageReceived(int to, Message message) {
...
...
...
if (timer2[msg.get_nodeid()]==null){


timer2[msg.get_nodeid()] = new Timer() ;
timer2[msg.get_nodeid()].schedule ( new Task() ,500 ) ;
}else{

timer2[msg.get_nodeid()].cancel() ;
timer2[msg.get_nodeid()] = new Timer() ;
timer2[msg.get_nodeid()].schedule ( new Task() ,500 ) ;
...
...
...
}
}


public static void sendPackets(int da_spedire, int mote) {
MANCANTE payload = new MANCANTE();

//int num_frame=0;


//System.out.println("CIAO\n");
//System.out.println("\nFRAME MANCANTE");

try {
System.out.println("Sending frame " + da_spedire + " of msg " + messaggio + " del nodo mittente "+ mote);
payload.set_nodeid((short)mote);
payload.set_msgcounter((short)messaggio);
payload.set_part_id((short)da_spedire);
moteIF.send(0, payload);
}

catch (IOException exception) {}
}

class Task extends TimerTask{

public void run(){


for (int i=5;i<BIGMSG.NODI;i++)
if (BIGMSG.nodo_frame[i] != 0){
System.out.println("\nFRAME MANCANTE");
for(int y=0; y<(BIGMSG.tot_frame[i]+1); y++)
if(BIGMSG.frame_mancante[i][y]==0){
BIGMSG.sendPackets(y,i);
//BIGMSG.timer2[i].cancel ( ) ; //Terminate the thread
//BIGMSG.timer2[i]=null;

}
}
}
}

tazok
06-08-2010, 10:09
mi sembra corretta l'implementazione dei task. Per il business non sò, sei stato un pò criptico :D