从c ++计时器创建自定义java计时器

时间:2016-06-29 17:03:09

标签: java android c++ timer

我有一个c ++自定义计时器的以下实现,由http://www.cplusplus.com/的用户提供,我现在找不到这个帖子。

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中为android项目创建一个类似的实现,但是我不熟悉java定时器。我找到了这个java定时器实现的代码片段:

Timer timer = new Timer();

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

这个java实现是否应该用来模拟c ++计时器?如果是这样,我需要添加什么才能获得与c ++计时器相同的功能。如果没有,什么是更好的解决方案?

提前致谢!

1 个答案:

答案 0 :(得分:1)

我相信这是你正在寻找的答案。您提供的示例代码段每分钟只运行一次计时器(60 * 1000),此示例每100毫秒运行一次,如果您正在寻找的话,可以提供更好的保真度。它不会像尽可能快地运行无限循环的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);
    }
}