2009-05-30 11 views
2

Je développe une simulation de file d'attente, en utilisant une minuterie d'oscillation pour déquiler des objets après un certain laps de temps. L'intervalle est déterminé en jetant un coup d'œil à l'objet suivant dans la file d'attente, en en obtenant un entier et en fixant le délai de son temporisateur correspondant.Modification du délai d'une minuterie d'oscillation pendant l'exécution

est ici l'extrait pertinent du programme (Note: _SECONDS_PER_ITEM est une constante définie ailleurs à 2000):

// stop the timer 
qTimer[q].stop(); 

// peek at how many items the customer has, and set the delay. 
qTimer[q].setDelay(customerQueue[q].peek().getItems()*_SECONDS_PER_ITEM); 

// the next time around, this method will see the flag, and dequeue the customer. 
working[q] = true; 

// denote that the customer is active on the UI. 
lblCustomer[q][0].setBorder(new LineBorder(Color.RED, 2)); 

// start the timer. 
qTimer[q].start(); 

Le problème que j'ai est que chaque client, peu importe le nombre d'articles qu'ils ont, est traité en une seconde.

Y at-il une autre méthode ou technique que je devrais utiliser pour régler le retard?

Répondre

3

Il semblerait que lorsque stop() un retardateur, le retard qui est utilisé pour déclencher l'événement suivant est le retard initial. Ainsi, la méthode correcte à utiliser dans l'exemple ci-dessus est setInitialDelay():

{ 
// stop the timer 
qTimer[q].stop(); 

// peek at how many items the customer has, and set the delay. 
qTimer[q].setInitialDelay(customerQueue[q].peek().getItems()*_SECONDS_PER_ITEM); 

// the next time around, this method will see the flag, and dequeue the customer. 
working[q] = true; 

// denote that the customer is active on the UI. 
lblCustomer[q][0].setBorder(new LineBorder(Color.RED, 2)); 

// start the timer. 
qTimer[q].start(); 

}