我是第一次使用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);
答案 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};