我是第一次使用 chrono 库,所以请宽容 C:。所以我想编写一个简单的获取时间函数,它只返回带有计时的处理器控制。但是当我尝试使用 clock()
函数从使用 steady_clock::now()
初始化的时间点获取值时,gcc 说 time_point
不包含 count()
成员。
/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);
最佳答案
建议:
std::chrono::steady_clock::time_point
GetTime()
{
return std::chrono::steady_clock::now();
}
如果您想要以基于 float 的秒为单位的计时结果,请执行以下操作:
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};
关于c++ - 计时库中的计数时间点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39113863/