如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?



我的初始代码是

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;

相关内容

最新更新