Я написал функцию SetInterval и SetTimeOut как функцию Javascript, но я не могу установить низкое значение 100 миллисекунд, а также я не могу вызвать два SetInterval. Пожалуйста, помогите мне!
Включая
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono>
using namespace std::chrono;
using namespace std;
milliseconds ms = duration_cast<milliseconds>(
system_clock::now().time_since_epoch()
);
SetTimeOut с функцией параметров
template <typename Proc, typename T>
void SetTimeOut(T & val, Proc p, unsigned long long n) {
unsigned long long def = ms.count(); // starting point
unsigned long long ds = ms.count() + n; // the time what need become equal to def
while (def != ds) {
milliseconds ms = duration_cast<milliseconds>(
system_clock::now().time_since_epoch()
); // time updates
def = ms.count(); // converting to nums
}
p(val); // calling the main function
}
То же самое, но вызывая функцию непараметра
template <typename Proc>
void SetTimeOut(Proc p, unsigned long long n) {
unsigned long long def = ms.count() ;
unsigned long long ds = ms.count() + n;
while (def != ds) {
milliseconds ms = duration_cast<milliseconds>(
system_clock::now().time_since_epoch()
); // time updates
def = ms.count();
}
p(); // Main function calling
}
p - функция, которую мы хотим вызвать, n - сколько времени должно пройти, s - сколько раз должно повторяться. SetInterval с функцией unparametr
template <typename Proc>
void SetInterval(Proc p, unsigned long long n, long long s) {
//here there are call in turn of function SetTimeOut
for (int i = 1; i != s + 1; i++) SetTimeOut(p, n * i);
}
//Same, but for parametr function
template <typename T, typename Proc>
void SetInterval(T val, Proc p, unsigned long long n, long long s) {
for(int i = 1; i != s+1; i++) SetTimeOut(val, p, n * i);
}
//Example with struct
struct Car{
string model;
double speed;
int fuel;
};
Основная функция
int main() {
Car Car;
int i = 1;
Car.fuel = 200;
Car.speed = 10.2;
//Example with lambda function.
SetInterval(Car,[&](struct Car){
Car.speed += 1.9;
Car.fuel -= 1.2;
cout << Car.speed << " " << Car.fuel << endl;
}, 900, 10); // it will end after 10 calls with 0.9 sec interval
//Second Example, wich not working
SetInterval(i, [&](int i){ i++; cout << i << endl;}, 500, 5);
}
Я думаю, потому что время вызова пересекается, но я не знаю, как это исправить.