繁体   English   中英

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;
    }
}

现在给我错误

错误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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM