Если вы внимательно посмотрите на стандарт C ++, относящийся к std::chrono::high_resolution_clock
, вы увидите, что он содержит тип члена std::chrono::high_resolution_clock::time_point
, который эквивалентен std::chrono::time_point<std::chrono::high_resolution_clock>
.
Помимо вышеуказанного типа члена, std::chrono::high_resolution_clock
содержит функцию-член now
, которая возвращает std::chrono::time_point<std::chrono::high_resolution_clock>
, то есть std::chrono::high_resolution_clock::time_point
, представляющее текущее значение часов.
В вашей функции у вас есть
n_time now = n_time::now();
то есть вы пытаетесь присвоить std::chrono::high_resolution_clock::time_point
переменной типа std::chrono::high_resolution_clock
, которая не звучит ясно, верно? Итак, вместо этого вы должны иметь
n_time::time_point now = n_time::now();
Вот полный код:
#include <chrono>
#include <iostream>
using n_time = std::chrono::high_resolution_clock;
auto timeSince(n_time::time_point start) {
n_time::time_point now = n_time::now();
return std::chrono::duration_cast<std::chrono::milliseconds>(now - start).count();
}
int main() {
auto now = n_time::now() - std::chrono::seconds{3600};
std::cout << timeSince(now) << std::endl;
return 0;
}
И результат в миллисекундах:
3600000
ОБНОВЛЕНИЕ
Вот как вы можете использовать приведенный выше рабочий пример в вашем случае:
void straight(int distance, int speed) {
auto start = n_time::now();
// some time has passed since this function has started
int time = (distance / speed) * 1000; // milliseconds
while (timeSince(start) < time) {
// code
}
}