2016-07-25 2 views
0

Быстрый вопрос здесь, мне нужно выполнить определенный метод только после определенного периода времени прошло (в миллисекундах):Java - оператор условия на основе миллисекунды

static double incrTrueBinaryErr = 62.5; 
static double incrTrueBinaryMov = 31.25; 
static double incr01001 = 360000; 
static double incr_1101 = 125; 
static double incr05008 = 3600000; 
static double incr10004 = 1024000; 
static double incr22000 = 1000; 
static double incr22001 = 1000; 

Date currDate; 

    while (true) 
    { 
    currDate = new Date(); 

    if (currDate.getTime() == currDate.getTime() + incrTrueBinaryErr) 
     //do stuff 

    if (currDate.getTime() == currDate.getTime() + incrTrueBinaryMov) 
     //do stuff 

    if (currDate.getTime() == currDate.getTime() + incr01001) 
     //do stuff 

    if (currDate.getTime() == currDate.getTime() + incr_1101) 
     //do stuff 

    if (currDate.getTime() == currDate.getTime() + incr05008) 
     //do stuff 

    if (currDate.getTime() == currDate.getTime() + incr10004) 
     //do stuff 

    if (currDate.getTime() == currDate.getTime() + incr22000) 
     //do stuff 

    if (currDate.getTime() == currDate.getTime() + incr22001) 
     //do stuff 

    } 

Однако моя программа никогда не попадает любой из них из-за того, насколько конкретны временные интервалы.

Каков наилучший способ сделать это?

+0

Постарайтесь получить время вне цикла 'While' ... или использовать sheduled executor [Проверить этот ответ SO] (http://stackoverflow.com/questions/20988664/calling-executorservice-after-some-interval -of-time). –

+0

Ваш вопрос непонятен. Вы хотите запускать несколько раз, каждый с другой задержкой? –

ответ

1

Этот вид выражения currDate.getTime() == currDate.getTime() + incr01001 будет оцениваться до true, только если incr01001 == 0. По той же причине x == x + y только когда y == 0.

+0

Итак, что вы говорите, мне потребуется команда wait() или sleep() для достижения любого из этих приращений? – Sean

+0

В зависимости от того, что вы хотите. Вы хотите, чтобы часть кода выполнялась в определенный момент времени? или когда определенное время прошло после предыдущего выполнения блока? –

+0

Мне нужно вызвать метод, который вызывает новую команду Date(), которая присваивает временному полю значения, записанного в другой файл, поэтому он вызывает метод, а затем создает новую временную метку, которая, надеюсь, увеличивает время оттуда от currDate – Sean

1

Чтобы выполнить определенный метод только после определенного периода времени прошло (в миллисекундах):

Вы можете использовать Thread.sleep(long milliseconds) метод, чтобы сделать это.

try{ 
    Thread.sleep(5000);//for 5 seconds 
} catch(Exception ex){ 
    System.out.println("Error: "+ex.getMessage()); 
} 
+0

Если бы я правильно понял, у этого не было бы полной функциональности, которую они хотят. Это предполагает, что они знают, сколько времени должно пройти, когда то, что должно произойти, должно зависеть от времени. Это могло только ждать одного из его действий в его блоках 'if', а не проверять их все. – 17slim

0

Попробуйте получить время вне вашего времени первого блока:

Date date = new Date(); 
while (true) 
{ 
    currDate = new Date(); 

    if (currDate.getTime() == date.getTime() + incrTrueBinaryErr) 
    //do stuff 
    //etc. 
} 

Таким образом, цикл, пока не держит переназначение даты.

Она также может быть немного слишком специфично, как вы говорите, так что для if блока, могут быть:

long timeDifference = date.getTime()+incrTrueBinaryErr-currDate.getTime(); 

if (Math.abs(timeDifference)<5l) 
    //do stuff 

Если новое время находится в пределах 5 миллисекунд, что вы хотите, «делать вещи».

Смежные вопросы