我正在开发一个仿真器,但我不明白如何将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;
}
}
此刻给我错误
错误C2676二进制'> =':'std :: chrono :: duration <__ int64,std :: nano>' 没有定义此运算符或未将其转换为可接受的类型 预定义的运算符
答案 0 :(得分:1)
两个time_point
对象之间的区别是duration
,它们不能轻易地转换成任何数字。您必须显式构造一个适当的工期对象。
有一些标准化的持续时间别名,例如std::chrono::nanoseconds
,您可以将其用作std::chrono::nanoseconds(500)
:
if ((std::chrono::steady_clock::now() - lastTime) >= (CPUCycles * std::chrono::nanoseconds(500)))
或者,如果您使用std::literals::chrono_literals
命名空间,则可以使用“用户”定义文字ns
:
if ((std::chrono::steady_clock::now() - lastTime) >= (CPUCycles * 500ns))
答案 1 :(得分:1)
std::chrono::steady_clock::now() - lastTime
返回一个duration
,因此您需要将其与持续时间进行比较。这意味着什么,取决于您的比较值意味着什么。最好/正确的方法是将其转换为持续时间。
所以您的CPUCycles * 500
返回的持续时间以纳秒为单位? (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
为您提供的所有清晰度。