2016-06-29 9 views
0

私は今すぐ見つけられない投稿のhttp://www.cplusplus.com/からのユーザーの礼儀で、次のようなC++カスタムタイマーの実装をしています。C++タイマーからカスタムJavaタイマーを作成する

struct timer 
{ 
    typedef std::chrono::steady_clock clock; 
    typedef std::chrono::milliseconds ms; 

    void reset() { start = clock::now(); } 

    unsigned long long ms_ellapsed() const 
    { 
     return std::chrono::duration_cast<ms>(clock::now() - start).count(); 
    } 

private: clock::time_point start = clock::now(); 
}; 

私はwhileループでそれを使用してx msが経過したかどうかを確認し、そうであれば0 msにリセットします。次に例を示します。

timer t; 
    while(true) { 
    if (t.ms_ellapsed() > 5133) { 
      t.reset(); 
    } 
    } 

私はアンドロイドのプロジェクトのためにJavaで同様の実装を作成したいのですが、Javaのタイマーに慣れていませんよ。私はC++タイマーをエミュレートするために使用すべきか、このJavaの実装は

Timer timer = new Timer(); 

timer.schedule(new TimerTask() { 
    public void run() { 
     // do your work 
    } 
}, 0, 60*1000); 

です:私は、Javaのタイマーの実装のこのコードスニペットを見つけましたか?もしそうなら、C++タイマーと同じ機能を得るために何を追加する必要がありますか?そうでない場合、よりよい解決策は何ですか?

ありがとうございます!

答えて

1

私はこれがあなたが探している答えだと思います。あなたが提供したサンプルスニペットは、毎分(60 * 1000)のタイマーを実行するだけです。この例は100msごとに実行され、探している場合はより正確な忠実度を提供します。可能な限り高速で無限ループを実行するC++の例と同じくらい速くはありませんが、POLLING_PERIOD_MSを補うために短縮することができます。

import java.util.Timer; 
import java.util.TimerTask; 

class TimerExample { 
    private static final int POLLING_PERIOD_MS = 100; 
    private static final int RESET_PERIOD_MS = 5133; 

    private static long start = System.currentTimeMillis(); 

    public static void reset() { 
     start = System.currentTimeMillis(); 
    } 

    public static long ms_ellapsed() { 
     return System.currentTimeMillis() - start; 
    } 

    public static void main(String[] args) { 
     Timer timer = new Timer(); 

     timer.scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() { 
       if (TimerExample.ms_ellapsed() > RESET_PERIOD_MS) { 
        TimerExample.reset(); 
       } 
      } 
     }, 0, POLLING_PERIOD_MS); 
    } 
} 
+0

ありがとう、これは私が探していたものです! –