Ik wil via een JAVA-applet reactiesnelheden meten op de miliseconde nauwkeurig. Ik neem daarvoor het verschil tussen twee tijdstippen met System.currentTimeMillis(). Dat werkt opzich wel, maar het is verre van nauwkeurig. Hij lijkt minimaal af te ronden op hondersten van seconden, want het laatste getal is altijd een 0. In zoekmachines vind ik steeds dezelfde currentTimeMillis functie terug, toch werkt dat niet naar behoren. Is het mogelijk om het anders te doen zodat hij wel een juiste weergave geeft van miliseconden?
Ligt dat misschien aan de gebruikte VM?
Want bij mij gaat het wel goed:
en als ik dat met mijn linux bak 3x uitvoer krijg ik: (java version "1.4.2_03")
1089315656297
1089315658514
1089315659547
en hetzelfde met mijn windows doos: (ook: java version "1.4.2_03")
1089315706109
1089315706375
1089315706593
Dus niks afronding bij mij
Want bij mij gaat het wel goed:
Java:
1
2
3
4
5
| public class Tijd { public static void main(String args[]){ System.out.println(System.currentTimeMillis()); } } |
en als ik dat met mijn linux bak 3x uitvoer krijg ik: (java version "1.4.2_03")
1089315656297
1089315658514
1089315659547
en hetzelfde met mijn windows doos: (ook: java version "1.4.2_03")
1089315706109
1089315706375
1089315706593
Dus niks afronding bij mij
Even zelf getest:
Als ik deze applet laad in een webpagina en open in Internet Explorer of Firefox, komt er inderdaad altijd een "afronding" voor, eindigend op 0 of 1, maar nooit iets anders!
Wanneer ik dit progje run in een appletviewer, krijg ik wel goede waarden.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class ReactieTijd extends Applet implements ActionListener { private long time1 = 0; public void init() { Button button = new Button( "Klik" ); button.addActionListener(this); add( button ); } public void actionPerformed(ActionEvent event) { long time2 = System.currentTimeMillis(); if (time1 != 0 ) showStatus( "Time: " + ( time2 - time1 ) ); time1 = time2; } } |
Als ik deze applet laad in een webpagina en open in Internet Explorer of Firefox, komt er inderdaad altijd een "afronding" voor, eindigend op 0 of 1, maar nooit iets anders!
Wanneer ik dit progje run in een appletviewer, krijg ik wel goede waarden.
[ Voor 3% gewijzigd door Pinobigbird op 08-07-2004 22:19 ]
Joey: Nice try. See the Netherlands is this make believe place where Peter Pan and Tinkerbell come from.
https://kattenoppasleiderdorp.nl
PV: 3080Wp ZO + 3465Wp NW = 6545Wp totaal 13°tilt
hmm had er even overheen gelezen dat het een applet was 
maar het zou dus goed kunnen zijn dat de browser minder tijd beschikbaar stelt aan de VM, waardoor dit soort "afrondingen" plaats kunnen vinden
maar het zou dus goed kunnen zijn dat de browser minder tijd beschikbaar stelt aan de VM, waardoor dit soort "afrondingen" plaats kunnen vinden
Vrij bizar. Ik krijg zowel in Internet Explorer als in een Appletviewer nooit een ander getal als laatste dan een 0. Het zou inderdaad aan de VM kunnen liggen, maar ik probeerde net een waarde uit Javascript te krijgen en die geeft ook alleen de miliseconden weer met als laatste getal een 0. Op een andere PC werkt het weer wel. Wellicht ligt het dan aan bepaalde computersystemen zelf? Ik vond op het internet echter een implementatie van reactietijdmetingen in Flash: http://kylan.newgrabs.com/reaction.swf
Die geeft wel gewoon alle getallen weer. Dat doet vermoeden dat ze een andere functie gebruiken. Timers in Java zijn er ook, maar die geven een signaal na een aantal miliseconden. Dat is net niet de bedoeling. Ik ben niet echt blij met de manier om een tijd te krijgen. Zoveel mogelijkheden als er zijn tegenwoordig en dan is er niet 1 simpele implementatie van een milisecondenteller.
Die geeft wel gewoon alle getallen weer. Dat doet vermoeden dat ze een andere functie gebruiken. Timers in Java zijn er ook, maar die geven een signaal na een aantal miliseconden. Dat is net niet de bedoeling. Ik ben niet echt blij met de manier om een tijd te krijgen. Zoveel mogelijkheden als er zijn tegenwoordig en dan is er niet 1 simpele implementatie van een milisecondenteller.
Zie dit artikel over de Java timer:
http://www.javaworld.com/...01/01-qa-0110-timing.html
http://www.javaworld.com/...01/01-qa-0110-timing.html
"Beauty is the ultimate defence against complexity." David Gelernter
Pagina: 1