/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Måle mikrosekunder
Fra : Anne Hauberg


Dato : 29-03-02 09:53

Hej...

Er det på nogen måde muligt at opnå mikrosekund nøjagtighed i Java, nå man
tager tiden? Hvis ja, hvordan

Synes ikke System.currentTimeMillis(); er nøjagtig nok, ligesom StopWatch.
Findes der noget mere nøjagtigt, som også opererer i ms., hvis mikrosekunder
er et lukket land?

VH. Anne



 
 
Mikkel Bundgaard (30-03-2002)
Kommentar
Fra : Mikkel Bundgaard


Dato : 30-03-02 22:40

"Anne Hauberg" <hauberg@get2net.dk> wrote in message
news:HWVo8.13$vR5.774@news.get2net.dk...
> Hej...
>
> Er det på nogen måde muligt at opnå mikrosekund nøjagtighed i
> Java, nå man tager tiden? Hvis ja, hvordan
>
> Synes ikke System.currentTimeMillis(); er nøjagtig nok, ligesom
> StopWatch. Findes der noget mere nøjagtigt, som også
> opererer i ms., hvis mikrosekunder er et lukket land?
>
> VH. Anne
Hej Anne

Jeg tror ikke, at du finder meget, hvis overhovet noget, der kan måle i mikrosekunder til en almindelig PC. Dette er dels pga.
computerens opbygning og dels pga. dit operativsystem. Så dette
er ikke kun et Java problem.

Mht. til nøjagtigheden af System.currentTimeMillis(), så afhænger
den meget af styresystemet. Se:
http://www.devx.com/premier/mgznarch/javapro/2001/08aug01/km0108/km0108p.asp

Da System.currentTimeMillis() åbenbart bruger API metoden
GetTickCount(), er har følgende nøjagtigheden på de forskellige
Windows-versioner.
NT 3.5 and later 10 ms
NT 3.1 16 ms
Windows 2000 10 ms
Windows 95/98 55 ms

Artiklen har også en beskrivelse af, hvordan man kan bruge Java
Native Interface (JNI) til at tilgå tællere med større nøjagtighed i
Windows (plus kode).

En anden metode kunne være at downloade JMF (Java Media
Framework) fra
http://java.sun.com/products/java-media/jmf/2.1.1/download.html
Hvis du downloader "Windows Performance Pack" (eller den
version, der passer til dit operativsystem) vil du kunne finde
klassen SystemTimeBase brugbar.

Håber du kan bruge det til noget .
--
Mikkel Bundgaard
IT University of Copenhagen
http://officehelp.gone.dk
Codito, Ergo Sum



Mogens Hansen (30-03-2002)
Kommentar
Fra : Mogens Hansen


Dato : 30-03-02 23:56


"Mikkel Bundgaard" <mikkelbu@teliamail.dk> wrote in message
news:a85bbo$61a$1@sunsite.dk...
> "Anne Hauberg" <hauberg@get2net.dk> wrote in message
> news:HWVo8.13$vR5.774@news.get2net.dk...
> > Hej...
> >
> > Er det på nogen måde muligt at opnå mikrosekund nøjagtighed i
> > Java, nå man tager tiden? Hvis ja, hvordan
> >
> > Synes ikke System.currentTimeMillis(); er nøjagtig nok, ligesom
> > StopWatch. Findes der noget mere nøjagtigt, som også
> > opererer i ms., hvis mikrosekunder er et lukket land?
> >
> > VH. Anne
> Hej Anne
>
> Jeg tror ikke, at du finder meget, hvis overhovet noget, der kan måle i
mikrosekunder til en almindelig PC. Dette er dels pga.
> computerens opbygning og dels pga. dit operativsystem.

Det er ikke rigtigt.
Alle nyere Intel x86 (fra omkring Pentium II) og kompatible CPU'er har en
hardware counter, der kører med clockfrekvensen.
Denne counter kan naturligvis læses fra software - ellers var der ikke meget
sjov ved den.
Fra Win32 API'et kan den tilgåes med
QueryPerformanceCounter
opløsningen findes med
QueryPerformanceFrequency
Jeg kan godt afsløre at det er CPU'en clock-frekvens.

Jeg vil ikke blive overrasket hvis den er tilgængelig fra Linux.

På en 1GHz maskine er det altså med en 1 nano sekund opløsning!

> Så dette
> er ikke kun et Java problem.
>

Hvordan tilgåes den fra Java ?


Venlig hilsen

Mogens Hansen



Flemming Jensen (01-04-2002)
Kommentar
Fra : Flemming Jensen


Dato : 01-04-02 01:33

On Fri, 29 Mar 2002 09:52:35 +0100, "Anne Hauberg"
<hauberg@get2net.dk> wrote:

>Hej...
>
>Er det på nogen måde muligt at opnå mikrosekund nøjagtighed i Java, nå man
>tager tiden? Hvis ja, hvordan
>
>Synes ikke System.currentTimeMillis(); er nøjagtig nok, ligesom StopWatch.
>Findes der noget mere nøjagtigt, som også opererer i ms., hvis mikrosekunder
>er et lukket land?

Problemet er givet vis at det skal det igennem en virtuel maskine
og tidsaflæsninger af den størrelsesorden vil være "old news" når
de når frem til din Java kode, og du vil ikke kunne bruge dem til
noget.

Det eneste i Java der arbejder med mindre tidsenheder er
wait-metoden, hvor man kan angive helt ned til nano-sekunder,
men om Java reelt kan det, ved jeg ikke. I givet fald kan
det kun lade sig gøre fordi den virtuelle maskine overtager
håndteringen af den korte tidsangivelse, og den ikke skal
sendes frem og tilbage mellem native kode og byte code.

Når man anvender så korte tidsintervaller er det ofte i
forbindelse med maskinær kode, og hvis dit program generelt
har karakter af at være maskinært er Java nok ikke det
rette sprog at vælge, så er C/C++ mere oplagt, eller
assembler hvis du virkelig skal ned og pille i små
tidsenheder.

Hvis du gerne vil holde dig til Java, og det kun er en
meget begrænset del af dit program der er maskinært, kan
du implementere denne del i f.eks. C/C++ og bruge JNI.
Skal du arbejde med meget små tidsenheder (jeg ved ikke
hvor små) bør du nok vælge en delegeret løsning hvor
C/C++ koden selv gør det der skal gøres i forbindelse
med de korte tidsintervaller, da du ellers er tilbage
i "old news" problemet.


/Flemming Jensen


Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408526
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste