计算时间库中的时间点

时间:2016-08-24 03:19:07

标签: c++ time chrono

我是第一次使用chrono库所以请宽大C:所以我想编写一个简单的get time函数,它只返回带有chrono的处理器tics。但是,当我尝试使用clock()函数从steady_clock::now()初始化的时间点获取值时,gcc表示time_point不包含count()成员。< / p>

/home/siery/Documents/Project/ChangeStateMachine/main.cpp|41|error: ‘struct std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long long int, std::ratio<1ll, 1000000000ll> > >’ has no member named ‘count’|

以下是代码:

float GetTime()
{
    float tic = 0.0;
    auto start = std::chrono::steady_clock::now();

    tic = (float)start.count();

    return tic;
}

谢谢!

编辑:

GetTime()函数应返回当前时间来计算增量时间,以便频繁更新程序中的对象,如:

fPastTime = fCurrentTime;
fCurrentTime = GetTime();

fDt = fCurrentTime - fPastTime;
if (fDt >= 0.15f)
    fDt = 0.15f;
Update(fDt);

2 个答案:

答案 0 :(得分:1)

如您所发现,time_point没有count成员。

您需要致电time_since_epoch以获取有效期,然后您可以致电count

float GetTime()
{
    auto start = std::chrono::steady_clock::now();

    return start.time_since_epoch().count();
}

我不确定float是不是最好的选择 - 我更喜欢long long这样的选择。

您通常只会获得(并存储)一个开始时间(作为time_point)和结束时间(也作为time_point)。减去这两个得到duration,你可以从count获得duration_cast(但你通常想要使用Immutable.js将其变成更有意义的东西,比如使用/显示之前的纳秒数)

答案 1 :(得分:1)

建议:

std::chrono::steady_clock::time_point
GetTime()
{
    return std::chrono::steady_clock::now();
}

如果您想要基于浮点秒的计时结果,请执行以下操作:

using fsec = std::chrono::duration<float>;
auto t0 = GetTime();
some_function();
auto t1 = GetTime();
fsec delta = t1 - t0;
std::cout << delta.count() << "s\n";
  • 您不对任何单位转换负责,因此您不会在此区域引入任何错误。
  • 代码很简单。简单==低风险。
  • 确实不需要GetTime()包装器。

编辑:

#include <chrono>

using namespace std::chrono;

using fsec = duration<float>;
using ftp = time_point<steady_clock, fsec>;

ftp
GetTime()
{
    return steady_clock::now();
}

int
main()
{
    auto fPastTime = GetTime();
    auto fCurrentTime = GetTime();

    auto fDt = fCurrentTime - fPastTime;
    if (fDt >= 0.15s)
        fDt = 0.15s;
    // ...
}

0.15s需要C ++ 14。在C ++ 11中看起来像:

    if (fDt >= fsec{0.15})
        fDt = fsec{0.15};