hallo,
wenn ich einen TimerTask mit einem sehr sehr kleinen intial delay aufruf - z.B. 1 millisekunde kommt es (nicht regelmäßig) vor das im Task der if-Zweig nicht ausgeführt wird.
hat wer eine idee warum bzw. gibts dafür eine erklärung?
greetz, alex.
wenn ich einen TimerTask mit einem sehr sehr kleinen intial delay aufruf - z.B. 1 millisekunde kommt es (nicht regelmäßig) vor das im Task der if-Zweig nicht ausgeführt wird.
Code:
public class SimpleBroadcastServer extends Node {
ArrayList<Connector> connectorList = new ArrayList<Connector>();
Clock clock = new Clock();
Message msg = new Message();
Timer timer;
/**
* @param seconds is the period time in seconds between successive task executions
*/
public SimpleBroadcastServer(int seconds) {
timer = new Timer();
timer.scheduleAtFixedRate( new BroadcastTask(),
1, // initial delay in milliseconds
seconds * 1000); // subsequent rate in seconds
//(converts milliseconds in seconds)
}
public void connect(Connector connector) {
connectorList.add(connector);
}
/**
* broadcastTime is used by class BroadcastTask
* creates a new message and new clock
* sets message time on current time
* sends generated message to the connectors in the connectorList
*/
public void broadcastTime() {
for(Connector connector: connectorList) {
msg.setTime(clock.getCurrentTime());
System.out.println("server sends broadcast\t\t\t\t\t\t "+msg.getMessageContent());//test output
connector.send(this, msg);
}
}
/**
* send respond to the client request
*/
public void send(Connector connectorFrom, Message msg){
Message respondMsg = new Message();
Clock clock = new Clock();
respondMsg.setTime(clock.getCurrentTime());
connectorFrom.send(this, respondMsg);
System.out.println("server got client request and responds with \t\t\t "
+ respondMsg.getMessageContent());//test output
}
/**
* BroadcastTask sends broadcastTime() at regular intervals
*/
class BroadcastTask extends TimerTask {
int numberMessages = 1;//defines how many messages will be sent
public void run() {
if (numberMessages > 0) {
broadcastTime(); //DIESER TEIL WIRD "VERSCHLUCKT"
numberMessages--;
} else {
System.out.println("messages transmitted");
timer.cancel();
}
}
}
}
hat wer eine idee warum bzw. gibts dafür eine erklärung?
greetz, alex.