我有一个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 ++计时器相同的功能。如果没有,什么是更好的解决方案?
提前致谢!
答案 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);
}
}