Newsgroup: it.comp.java
Titolo: Cronometro come ?

Devo fare un interrupt() su un threadgroup dopo n secondi.
Come faccio x far si che la interrupt avvenga essattamente dopo n secondi
che il programma è in esecuzione ? come ilmplemento "il cronometro" ?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 che il programma è in esecuzione ? come ilmplemento "il cronometro" ?
Per esempio con una sleep di n secondi, oppure con un Timer (di swing).
Saluti
CarMas

 CarMas
Con la sleep è impensabile, il thread è il main e non si deve sospendere.


 CarMas
Con la sleep è impensabile, il thread è il main e non si deve sospendere.
-- 


 Con la sleep è impensabile, il thread è il main e non si deve sospendere.
Beh li' sta a te capire dove mettere la sleep, io ti ho dato solo un'idea.
Saluti
CarMas

 CarMas
Mi spiego meglio
La classe Main che lancia un certo numero di thread che fanno diverse
cose.....deve durare un certo numero di tempo....passato il quale, manda
una interrupt() a tutti i thread x terminare il programma.


 writes:
j> Mi spiego meglio La classe Main che lancia un certo numero di
j> thread che fanno diverse cose.....deve durare un certo numero di
j> tempo....passato il quale, manda una interrupt() a tutti i thread x
j> terminare il programma.
E se l'interrupt lo mandasse un thread watchdog ?
-- 
 /\           ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
  //--\| | \|  |   Integralista GNUslamico
\/                 e coltivatore diretto di Software

 E se l'interrupt lo mandasse un thread watchdog ?
Mettiamola cosě.
Voglio fare un ciclo while che duri k secondi (cosa fa nel corpo non mi
interessa). come devo procedere ?


 interessa). come devo procedere ?
Io ribadisco, sleep.
E occhio alle soluzioni "pericolose" che fanno impennare l'uso della cpu, 
rischio sempre dietro l'angolo con l'idea di questi cicli while in testa.
Saluti
CarMas

> E se l'interrupt lo mandasse un thread watchdog ?
j> Mettiamola così.  Voglio fare un ciclo while che duri k secondi
j> (cosa fa nel corpo non mi interessa). come devo procedere ?
Allora non ci si fida  del tempo di esecuzione delle istruzioni, cambi
CPU e cambia il timing. Ci si deve affidare ad un cronometro esterno.
La cosa,  per me, si realizza  con un thread  che sta in sleep  per il
tempo richiesto  (occhio che  la precisione non  è eccezionale)  e poi
imposta la  condizione di uscita dal  loop che lavora  (eseguito in un
altro  thread).  Guarda tu  se  ti può  andare  bene  usare il  metodo
interrupt oppure usare una variabile condivisa tra i due trhead


 che il programma è in esecuzione ? come ilmplemento "il cronometro" ?
"esattamente dopo n secondi" è impossibile; al massimo si può fare "dopo 
minimo n secondi" perchè lo scattare dell'allarme dipende 
dall'esecuzione dell'istruzione di controllo, che non è per niente 
sincronizzata con il reale trascorrere dei secondi...
l'hardware x86 (purtroppo?) non ha supporto per operazioni in realtime 
tramite un orologio esterno (anch'esso in hardware.... si chiama 
watchdog, vero?) che permetta di sincronizzare i processi a prescindere 
da quello che stanno facendo...
Io avevo risolto un caso simile prendendo spunto dalla documentazione 
sul perchè sono deprecati i metodi suspend() e resume():
avevo aggiunto una variabile visibile a tutti i thread che li informava 
se dovevano interrompersi o no: ad ogni iterazione i Thread 
controllavano la variabile e nel caso si fermavano. Un miniscolo thread 
contatore, dopo essersi risvegliato dalla sleep() poteva quindi 
interromperli tutti con la sola modifica di quella variabile, eliminando 
a priori il rischio di deadlocks e affini...
L'unica "sfiga" (del tutto voluta!!!!) era che i thread non si fermavano 
di botto, ma finivano prima l'iterazione che stavano compiendo.
-- 
----------------------------------------------------------------------------------
       /)/)		La mia vita è tutta rose e fiori...
      ( '.')
    o(('')('')				... ma io sono allergico !!!