【问题标题】:How to get the time between two points in time如何获取两个时间点之间的时间
【发布时间】:2019-12-03 20:41:06
【问题描述】:

我尝试将两个时间点之间经过的时间以毫秒为整数或以秒为双倍。 我试图在某物上施加 4m/s² 的恒定加速度。我已经收到了:

int main() {
    double accel = 4, velocity = 0;

    auto start = chrono::system_clock::now();
    sleep(3);
    auto ende = chrono::system_clock::now();

    chrono::duration<double> elapsed_seconds = ende - start;
    velocity += accel * elapsed_seconds;  //This is where I don't know what to put instead of "elapsed_seconds"

    cout << "Velocity after " << elapsed_seconds << "s is " << velocity << "m/s" << endl;
    return 0;
}

但正如您所见,它不起作用。我已经找到了类似的东西

chrono::duration_cast<ms>(elapsed_time);

但我无法让它工作。你有什么想法吗?

【问题讨论】:

  • 您可以使用elapsed_seconds.count()elapsed_seconds中提取底层double。这将代表秒数。
  • auto elapsed_seconds = chrono::duration_cast&lt;chrono::seconds&gt;(ende-start).count();
  • 旁注:您可能应该为此使用steady_clock,因为您不希望您的速度计算受到system_clock 突然变化的影响(例如时钟调整等)。
  • @WhozCraig 这不会返回double,对吗?我在想double elapsed_seconds = std::chrono::duration&lt;double&gt;(ende - start).count(); 会更好。
  • @TedLyngmo 不,不会,你是对的。但是,将 seconds 更改为 milliseconds 将满足 OP 显然想要的整数选项。火鸡吃多了。还在打盹=P

标签: c++ time chrono elapsedtime


【解决方案1】:

说你“计算”一个双精度值可能有点奇怪,但 elapsed_seconds.count() 将返回基础值。

【讨论】:

  • 谢谢!那行得通!但我不太明白这是做什么的
  • 它“返回滴答计数”。同样,在这种情况下,这听起来很奇怪,因为您将其转换为双精度,但它基本上应该在您的持续时间内获取“滴答声”的数量并将其转换为您请求的数据类型和“比率”。 en.cppreference.com/w/cpp/chrono/duration/count
【解决方案2】:

将秒数作为双精度数:

auto seconds = chrono::duration<double>(ende - start);
auto val = seconds.count();

获取毫秒数:

auto ms = chrono::duration_cast<chrono::milliseconds>(ende - start);
auto val = ms.count();

使用duration_cast时要小心,可能会丢失精度。

【讨论】:

  • 好的,谢谢。我喜欢你用我的“ende”。忘记翻译 Stackoverflow 的变量名了哈哈
猜你喜欢
  • 2018-10-16
  • 2013-09-08
  • 2011-03-04
  • 2021-07-31
  • 1970-01-01
  • 2019-06-22
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多