Java Timer

Статус: Offline
Реєстрація: 20.03.2010
Повідом.: 145
1.Есть ли таймер считающий точно в 10мс. или какие вы знаете и пользовались.
 
На java у вас такой таймер написать не получится:
1) Java использует виртуальную машину с сборщиком мусора, откуда получаем ненормированое время исполнения кода.
2) Если целевая платформа Windows - то получаем еще несколько костылей:
а) Windows - не ОС реального времени. Поэтому квантование времени процессора для процессом может тоже варьироваться.
б) разрешающая способность таймера в Windows по умолчанию равна 15 мс. Это меняется, но меняется хитро.
и т.д. :)
 
а готовый таймер что б не писать.
 
Вариант первый - через отдельный поток и цикл:

Код:
public class Timer implements Runnable {

    private static final int TIMER_DELAY = 10;
    
    public void run() {
        try {
            while (true) {
                //do smth
                Thread.sleep(TIMER_DELAY);
            }
        }
        catch (InterruptedException ex) {
            // handle exception
        }
    }
}

В коде вызывается так:

Код:
new Thread(new Timer()).start();

Вариант некомильфо. если таких тймеров будет много, это будет существенно сказываться на перфомансе.
Вариант второй - java.util.Timer:

Код:
public class UserTask extends TimerTask {
    public void run(){
    //do smth
  }
}
В коде вызывается так
Код:
new Timer().schedule(new UserTask(), 0, 10);

Второй вариант более оптимизирован и кроме того имеется готовый механизм отмены как отдельных тасков так и таймера вообще.
 
первый вариан интересный но не пробывал
второй вариант только секунды можно считать мс-нельзя пробывал
я думаю в яве есть другие таймеры но только платные где их взять или купить эти для серьезной работы не подходят
 
второй вариант только секунды можно считать мс-нельзя пробывал

Плохо пробовал.

Код:
public void schedule(TimerTask task, long delay, long period)

delay - задержка в мс,
period - период в мс.

соответственно
Код:
schedule(new Task(), 0, 10);

Запустит таймер с 0 задержкой и периодом в 10 миллисекунд.

я думаю в яве есть другие таймеры но только платные где их взять или купить эти для серьезной работы не подходят

Для какой такой серьезной работы? Для большего числа задач вышеуказанного таймера хватает с головой. Если нужна более высокая точность к примеру в мкс, или нс, есть, опять же в нативной жаве, класс ScheduledThreadPoolExecutor. Методом
Код:
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
можно указать TimeUnit - мс, мкс или нс. Но таймер с такой точностью имеет смысл использовать только с риалтаймовой осью, иначе велика погрешность.
 
Назад
Зверху Знизу