我的初始代码是
using n_time = std::chrono::high_resolution_clock;
n_time::time_point c_time = n_time::now();
n_time::time_point start = n_time::now();
auto gyro::duration(){
return std::chrono::duration_cast<std::chrono::milliseconds>(c_time-start).count();
}
但后来我意识到我想找到从开始参数到now()
的毫秒数,我不确定我的初始代码是否会给我这个。所以我尝试了
auto timeSince(n_time::time_point start) {
n_time now = n_time::now();
return std::chrono::duration_cast<std::chrono::milliseconds>(now - start).count();
}
这就是您在start
后找到毫秒的方式吗?我听说有一个名为time_since_epoch()
的函数,我不确定使用它是否会更好?
这个时钟是针对我正在尝试编写的特定机器人功能,所以我需要确保时钟不会导致转换错误:
void straight(int distance, int speed) {
int time = (distance / speed) * 1000; // milliseconds
while (timeSince() < time) {
// code
}
}
duration()
函数在我的函数中没有给出任何错误,但timeSince()
给了我转换错误,例如
错误:从"int"转换为非标量类型 'std::chrono::_V2::system_clock::time_point {aka 标准::时间::time_point>
如果你仔细看看与std::chrono::high_resolution_clock
相关的C++标准,你会发现它包含一个成员类型std::chrono::high_resolution_clock::time_point
,相当于std::chrono::time_point<std::chrono::high_resolution_clock>
。
除了上述成员类型外,std::chrono::high_resolution_clock
还包含返回std::chrono::time_point<std::chrono::high_resolution_clock>
的成员函数now
,即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
}
}
我听说有一个名为 time_since_epoch(( 的函数,我不确定使用它是否更好
不是真的,例如参见 std::chrono epoch 是什么时候?
有一个事实上的(非官方的(标准,即std::chrono::system_clock::time_point具有与Unix Time一致的纪元。这定义为自 1970 年 1 月 1 日星期四协调世界时 (UTC( 00:00:00 以来经过的持续时间,不包括闰秒。
您看到的错误是由此行生成的
n_time now = n_time::now();
哪个应该是
n_time::time_point now = n_time::now();
// ^^^^^^^^^^^^
给定using n_time = std::chrono::high_resolution_clock;