C ++将高分辨率时钟与固定数字进行比较
C++ Compare High Resolution Clock with fixed number
我正在开发模拟器,但我不明白如何将使用 chrono
库测量的经过时间与固定数字(CPUCycles * 0.0000005
)进行比较。
类似
auto lastTime = std::chrono::steady_clock::now();
while (condition)
{
if ((std::chrono::steady_clock::now() - lastTime) >= (CPUCycles * 0.0000005))
{
//do something;
}
else
{
//do something else;
}
}
现在给我错误
Error C2676 binary '>=': 'std::chrono::duration<__int64,std::nano>'
does not define this operator or a conversion to a type acceptable to
the predefined operator
两个 time_point
object is a duration
之间的差异,它们不容易从任何数字转换。您必须明确构造一个适当的持续时间对象。
有一些标准化的持续时间别名,例如 std::chrono::nanoseconds
,您可以将其用作 std::chrono::nanoseconds(500)
:
if ((std::chrono::steady_clock::now() - lastTime) >= (CPUCycles * std::chrono::nanoseconds(500)))
或者如果您使用 std::literals::chrono_literals
命名空间,您可以使用 "user" 定义文字 ns
:
if ((std::chrono::steady_clock::now() - lastTime) >= (CPUCycles * 500ns))
std::chrono::steady_clock::now() - lastTime
returns a duration
因此您需要将它与持续时间进行比较。这意味着什么取决于您的比较值意味着什么。 best/correct 方法是将其转换为持续时间。
所以你的 CPUCycles * 500
returns 持续时间以纳秒为单位? (0.0000005 == 500e-9
) 然后告诉编译器:
if ((std::chrono::steady_clock::now() - lastTime) >= CPUCycles * std::chrono::nanoseconds(500))
看看这表达的意思有多干净?每 500ns 有 1 个周期 -> 所以你经过的时间是 CPUCycles 乘以那个。
另一种方法是使用成员函数 count()
获取持续时间的计数,但您最想首先转换持续时间:
auto diff = std::chrono::steady_clock::now() - lastTime;
if(std::chrono::duration_cast<std::chrono::nanoseconds>(diff).count() >= CPUCycles * 500) ...
但这失去了 chrono
给你的所有清晰度。
我正在开发模拟器,但我不明白如何将使用 chrono
库测量的经过时间与固定数字(CPUCycles * 0.0000005
)进行比较。
类似
auto lastTime = std::chrono::steady_clock::now();
while (condition)
{
if ((std::chrono::steady_clock::now() - lastTime) >= (CPUCycles * 0.0000005))
{
//do something;
}
else
{
//do something else;
}
}
现在给我错误
Error C2676 binary '>=': 'std::chrono::duration<__int64,std::nano>' does not define this operator or a conversion to a type acceptable to the predefined operator
两个 time_point
object is a duration
之间的差异,它们不容易从任何数字转换。您必须明确构造一个适当的持续时间对象。
有一些标准化的持续时间别名,例如 std::chrono::nanoseconds
,您可以将其用作 std::chrono::nanoseconds(500)
:
if ((std::chrono::steady_clock::now() - lastTime) >= (CPUCycles * std::chrono::nanoseconds(500)))
或者如果您使用 std::literals::chrono_literals
命名空间,您可以使用 "user" 定义文字 ns
:
if ((std::chrono::steady_clock::now() - lastTime) >= (CPUCycles * 500ns))
std::chrono::steady_clock::now() - lastTime
returns a duration
因此您需要将它与持续时间进行比较。这意味着什么取决于您的比较值意味着什么。 best/correct 方法是将其转换为持续时间。
所以你的 CPUCycles * 500
returns 持续时间以纳秒为单位? (0.0000005 == 500e-9
) 然后告诉编译器:
if ((std::chrono::steady_clock::now() - lastTime) >= CPUCycles * std::chrono::nanoseconds(500))
看看这表达的意思有多干净?每 500ns 有 1 个周期 -> 所以你经过的时间是 CPUCycles 乘以那个。
另一种方法是使用成员函数 count()
获取持续时间的计数,但您最想首先转换持续时间:
auto diff = std::chrono::steady_clock::now() - lastTime;
if(std::chrono::duration_cast<std::chrono::nanoseconds>(diff).count() >= CPUCycles * 500) ...
但这失去了 chrono
给你的所有清晰度。