2016-07-25 49 views
0

简单的问题在这里的条件语句,我需要执行只有经过特定的时间段已经过去(以毫秒为单位)一定的方法:爪哇 - 基于毫秒

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执行器[请检查此答案](http://stackoverflow.com/questions/20988664/calling-executorservice-after-some-interval - 时间).. –

+0

你的问题不清楚。你想跑几次,每次都有不同的延迟? –

回答

1

只有在incr01001 == 0的情况下,这种表达currDate.getTime() == currDate.getTime() + incr01001才会评估为true。出于同样的原因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. 
} 

这样while循环不保留重新分配的日期。

这也可能是有点过于具体,就像你说的,让你的if块可能:

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

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

如果新的时间是你想要的5毫秒内,“做的东西”。