[英]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;
}
}
现在给我错误
错误C2676二进制'> =':'std :: chrono :: duration <__ int64,std :: nano>'没有定义此运算符或未转换为预定义运算符可接受的类型
两个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))
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
给您的所有清晰度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.