gpt4 book ai didi

c++ - 计时库中的计数时间点

转载 作者:行者123 更新时间:2023-11-28 02:01:52 28 4
gpt4 key购买 nike

我是第一次使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com