Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyj±tek www.elektroda.pl do Adblock.
Dzięki temu, że ogl±dasz reklamy, wspierasz portal i użytkowników.

java - jak u¶pić komputer?

p_zag 06 Wrz 2011 14:37 2034 8
  • #1 06 Wrz 2011 14:37
    p_zag
    Poziom 13  

    witam
    potrzebuje u¶pić komputer na czas liczony w mikrosekundach i nie wiem jak to zrobić.

    Długo szukałem w internecie ale nalazłem tylko co¶ takiego :

    Kod: java
    Zaloguj się, aby zobaczyć kod


    Ale ten kod u¶pi mi komputer liczony w milisekundach, a ja potrzebuje w mikrosekundach.
    Piotr

    0 8
  • #3 06 Wrz 2011 18:34
    krru
    Poziom 32  

    jest sleep(milisec, nanosec), ale nie liczyłbym na mikrosekundow± dokładno¶ć. To jednak działa pod systemem.

    0
  • #4 06 Wrz 2011 18:45
    Dżyszla
    Poziom 42  

    A koniecznie u¶pić? Może zamiast tego lepiej po prostu wykonać pętlę odczekuj±c±. Zajmie procesor, ale wstrzyma wykonywanie w±tku na zadan± ilo¶ć czasu nawet z dokładno¶ci± do us (choć to zależy od obci±żenia procesora - w ¶rodowisku wielow±tkowym nigdy nie możesz być pewny, po jakim czasie w±tek dostanie przydział czasu procesora).

    0
  • #5 07 Wrz 2011 07:02
    p_zag
    Poziom 13  

    witam
    Dziękuję wszystkim za odpowiedzi. Widzę, że będę musiał skorzystać z "pętli oczekuj±cej".

    Piotr

    0
  • #6 09 Wrz 2011 07:03
    hans512
    Poziom 14  

    Pierwsza mozliwosc:

    http://download.oracle.com/javase/6/docs/api/java/lang/Thread.html#sleep%28long,%20int%29

    Pierwszy parametr wpisujesz 0(milisekundy), zas drugi (nanosekundy) tyle ile wlasnie potrzebujesz(+- ewentualne opoznienie). Nie daje gwarancji ze to zadziala, ale wg dokumentacji powinno.

    Druga mozliwosc:

    Code:
    (50L, TimeUnit.MICROSECONDS)


    Trzecia mozliwosc (najbardziej wlasciwa):

    Do tego celu mozesz wykorzystac System.nanoTime() - podaje ci to akutalny czas systemowy w nanosekundach.

    Pseudo kod:
    Code:
    double start_time = System.nanoTime()
    
    int pauza = 500

    if System.nanoTime() - start_time < pauza
    {
    //pusta petla do momentu gdy roznica w czasie nie bedzie wieksza niz "pauza"
    }


    Pisalem z glowy ale powinienies wiedziec oco chodzi. :)
    ps. nie przejmuj sie - to jest w pelni profesjonalne podejscie, mimo ze 7 linijek zamiast jednej z sleep :)

    0
  • #7 09 Wrz 2011 14:03
    McMonster
    Poziom 32  

    hans512 napisał:
    Pseudo kod:
    Code:
    double start_time = System.nanoTime()
    
    int pauza = 500

    if System.nanoTime() - start_time < pauza
    {
    //pusta petla do momentu gdy roznica w czasie nie bedzie wieksza niz "pauza"
    }


    Tylko się przyczepię dla zasady, że instrukcja warunkowa nie jest pętl±, powinno tam być w tym wypadku raczej "while".

    0
  • #8 10 Wrz 2011 04:35
    hans512
    Poziom 14  

    tak. oczywiscie powinno byc tam while :)

    0
  • #9 24 Gru 2011 11:22
    p_zag
    Poziom 13  

    witam
    skorzystałem z rozwi±zania zaproponowanego przez kolegę hans512.

    Dziękuje wszystkim za podpowiedzi.
    Temat uważam za zamknięty.

    0