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 给你的所有清晰度。