这是修复代码的简单方法。
将clock() 放入无限的while 循环中,让时钟计数,这样当它达到两秒时,它会触发rand() 生成一个新的随机数。重置clock()。无限重复。
现在背后的数学:
如您所知,增量时间是最终时间减去原始时间。
dt = t - t0
不过,这个增量时间只是在 while 循环中经过的时间量。
a 函数的导数表示函数相对于其中一个变量的无穷小变化。我们的deltaTime。
函数对变量的导数定义为http://mathworld.wolfram.com/Derivative.html
f(x + h) - f(x)
f'(x) = lim -----------------
h->0 h
首先你得到一个时间,即TimeZero = clock(),供参考。
然后你从你刚刚得到的新时间中减去那个时间,然后除以h。 h 是 CLOCKS_PER_SEC。现在增量时间是
deltaTime = (clock() - TimeZero) / CLOCKS_PER_SEC;
当deltaTime > secondsToDelay时,你生成一个新的随机数。
将所有这些放入代码中会导致:
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
cout << "Generate a new random number every 2 seconds \n\n";
// create a clock and start timer
clock_t TimeZero = clock(); //Start timer
double deltaTime = 0;
double secondsToDelay = 2;
bool exit = false;
// generate random seed using time
srand(time(0));
while(!exit) {
// get delta time in seconds
deltaTime = (clock() - TimeZero) / CLOCKS_PER_SEC;
cout << "\b" << secondsToDelay - deltaTime << "\b";
// compare if delta time is 2 or more seconds
if(deltaTime > secondsToDelay){
cout << " ";
// generate new random number
int i = rand() % 100 + 1;
cout << "\nNew random : " << i << " \n";
//reset the clock timers
deltaTime = clock();
TimeZero = clock();
}
}
return 0;
}