2016-07-25 7 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'ループの外に時間をかけてみてください...そうでなければ、予定されているエグゼキュータを使用してください。[これをチェックしてください]答え(http://stackoverflow.com/questions/20988664/calling-executorservice-after-some-interval - 時間).. –

+0

あなたの質問は明確ではありません。それぞれ異なる遅延で何度も走りたいですか? –

答えて

1

この種類の式currDate.getTime() == currDate.getTime() + incr01001は、incr01001 == 0の場合にのみtrueと評価されます。同じ理由のためは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

私が正しく理解していれば、これは彼らが望むかなりの機能を持っていないでしょう。これは、どれくらいの時間が経過しなければならないかを知っていることを前提としています。これは、彼等の行動のうちの1つを '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ミリ秒以内であれば、「ものを行います」。