Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;比较高分辨率时钟与固定数字_C++_Emulation_Chrono - Fatal编程技术网

C++ C++;比较高分辨率时钟与固定数字

C++ C++;比较高分辨率时钟与固定数字,c++,emulation,chrono,C++,Emulation,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 somet

我正在使用一个模拟器,我不知道如何将使用
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” 未定义此运算符或转换为用户可接受的类型 预定义运算符


两个对象之间的差异是a,它不容易从任何数字转换。您必须显式构造一个适当的duration对象

有一些标准化的持续时间别名,如
std::chrono::nanoseconds
,您可以将其用作
std::chrono::nanoseconds(500)

或者,如果使用
std::literals::chrono_literals
名称空间,则可以使用“用户”定义literal
ns

if ((std::chrono::steady_clock::now() - lastTime) >= (CPUCycles * 500ns))

两个对象之间的差异是a,它不容易从任何数字转换。您必须显式构造一个适当的duration对象

有一些标准化的持续时间别名,如
std::chrono::nanoseconds
,您可以将其用作
std::chrono::nanoseconds(500)

或者,如果使用
std::literals::chrono_literals
名称空间,则可以使用“用户”定义literal
ns

if ((std::chrono::steady_clock::now() - lastTime) >= (CPUCycles * 500ns))

std::chrono::staddy_clock::now()-lastTime
返回一个值,因此需要将其与持续时间进行比较。这意味着什么取决于你的“与价值相比”意味着什么。最好/正确的方法是将其转换为持续时间

那么您的
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) ...
auto diff=std::chrono::stable\u clock::now()-lastTime;
如果(std::chrono::duration_cast(diff).count()>=CPUCycles*500)。。。

但是这会使
chrono
提供给您的清晰度降低。

std::chrono::stable\u clock::now()-lastTime
返回一个值,因此您需要将其与持续时间进行比较。这意味着什么取决于你的“与价值相比”意味着什么。最好/正确的方法是将其转换为持续时间

那么您的
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) ...
auto diff=std::chrono::stable\u clock::now()-lastTime;
如果(std::chrono::duration_cast(diff).count()>=CPUCycles*500)。。。

但是这就失去了chrono给你的所有清晰性。

非常感谢,它是有效的,但我不明白为什么这种情况总是正确的。条件固定为2MHz Intel 8080速度与我的Intel core i3相比,您是否将
中的
lastTime
设置为当前时间?如果不是,那是你的错误,否则我们需要更多的代码(最好在一个单独的问题)我发现了问题
cout
需要一些时间,当条件为真时,不可能在视频上打印。但是,如果我交替地评论一个
cout
我可以看到它们两个。非常感谢,它是有效的,但我无法理解为什么条件总是正确的。条件固定为2MHz Intel 8080速度与我的Intel core i3相比,您是否将
中的
lastTime
设置为当前时间?如果不是,那是你的错误,否则我们需要更多的代码(最好在一个单独的问题)我发现了问题
cout
需要一些时间,当条件为真时,不可能在视频上打印。但是如果我交替地评论一个
cout
,我可以同时看到它们