我经常编写使用一个框架的软件,该框架中每秒调用多次回调方法,但是在该回调内部,我只想每N
秒执行一些操作。所以我经常这样做:
int lastMethodCallTime = 0;
int methodRunIntervalMs = 5000;
void methodThatGetsCalledManyTimesPerSecond(){
int currentTime = getcurrentTime();
if(currentTime - lastMethodCallTime >= methodRunIntervalMs){
lastMethodCallTime = currentTime;
myMethod();
}
}
但是很可恶。这很丑陋,需要声明外部变量并且非常容易发生错误(很多时候我忘记了lastMethodCallTime = currentTime;
,然后想知道为什么它被这么多次调用了)。而且,如果您有多个以不同间隔调用的方法,那么这种丑陋只会成倍增加。
肯定有更优雅的方法吗?我正在寻找一种可以用任何语言实现的想法。而且,在很多情况下,将方法调用置于单独的线程中也不是一种选择,因此我需要在这些约束内进行工作。