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

Create custom java timer from c++ timer

本文关键字:定时器 java 自定义 创建 c++      更新时间:2023-10-16

我有一个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();
    }
  }

我想为android项目创建一个类似的java实现,但我不熟悉java计时器。我找到了这个java定时器实现的代码片段:

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

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

提前感谢!

我相信这就是你正在寻找的答案。您提供的示例代码片段每分钟(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);
    }
}