|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2007
Messaggi: 207
|
[Java]misurazioni di intervalli in millisecondi
per progetto scolastico mi sono ritrovato a realizzare una simulazione di una sfida a rigori tra due squadre di calcio con la concurrency programming in Java
il progetto da me gia ultimato e funzionante va egregiamente con una pecca solo su un punto: -il monitor Arbitro che gestisce due metodi sincronizzati (Tira per il calciatore e Para per il portiere) dovrebbe controllare due ritardi: -il calciatore al momento del fischio deve avere un ritardo variabile prima del tiro, se questo ritardo supera i 10ms il tiro viene annullato -il portiere al momento del fischio prima di buttarsi deve avere un ritardo minimo di 2ms il ritardo sul calciatore ho pensato di introdurlo con una funzione matematica : (long)(16*Math.random()) che dovrebbe restituirmi un numero compreso tra 0 e 15 con il metodo System.currentTimeMillis() ho notato che mi arrotonda la cifra segnalandomi lo stesso risultato al momento della differenza tra i due momenti(prima del ritardo e dopo): o 0 o 15(0 se il ritardo è compreso tra 0 e piu o meno 7 , e 15 per valori compresi tra 7 e 15) (cercando in internet ho anche scoperto che e' dipendente dal sistema operativo) non consentendomi una misurazione precisa che cerco di effettuare prima di eseguire il ritardo variabile e dopo di questo >_> in pratica come posso effettuare una misurazione più precisa?cercando in internet ho letto post relativi ad hardware dedicato o addirittura programmazione a basso livello per ovviare a questo problema ma e' ancora cosi? tra l'altro per il ritardo ho introdotto una sleep pensando che siccome non viene rilasciato il lock sul processo che esegue il metodo sincronizzato(come invece sarebbe accaduto con una wait) sarei stato più preciso nella misurazione, ho aggiunto questa nota per sapere se sbaglio ed eventualmente cosa ihih vi ringrazio per una eventuale risposta ^_^ Buona giornata a tutti Ultima modifica di m.distrutti : 08-06-2008 alle 15:23. |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Jun 2008
Messaggi: 7
|
Ciao!!
Anche io sto facendo il tuo stesso progetto...e come te ho lo stesso problema...oltre a tanti altri... posso chiederti una cosa??... ...Come hai gestito il portiere?? |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Una volta calcolato il ritardo ed effettuata la sleep con lo stesso sei perfettamente allineato con la richiesta..in quanto ai fini della valità del tiro basta effettuare un confronto(tra 2 int senza considerare le unita di misura) tra i 10ms stabiliti e il ritardo randomico introdotto.
|
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Sep 2007
Messaggi: 207
|
Quote:
certo non e' stato proprio un metodo elegante ,l'ho tirato giu velocemente dato che non ho molto tempo da dedicarci >_>, in pratica ho creato due flag di default i portieri nella mia prima implementazione si buttavano concorrenzialmente nel metodo Para sincrono del monitor e rimanevano in wait affinchè l'arbitro fischiava eseguendo una notifyAll su di essi e dopo aver controllato che la squadra che deve parare sia quella di appartenenza eseguo la parata... il portiere non deve pero fossilizzarsi su un metodo soltanto perchè dovra waittarsi sia in para che in tira aspettando il fischio dell'arbitro , considera cmq che la squadra iniziale e' casuale percio uno all'inizio si waittera in para e l'altro in tira e si alterneranno aggiungendo i flag hannoParato e HannoTirato li faccio uscire dal metodo corrente per spostarsi nell'altro ...ora la spiegazione e' un po contorta, se mi lasci il contatto messanger magari per pm ti faccio vedere tutto^_^ |
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jun 2008
Messaggi: 7
|
Ok...ti ringrazio...ti ho inviato un messaggio privato con il mio contatto...
Grazie!! |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
System.nanoTime() l'hai già provato?
dovrebbe avere una precisione di circa 1ms su xp se non sbaglio...
__________________
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Sep 2007
Messaggi: 207
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:04.




















