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
名称空间,则可以使用“用户”定义literalns
:
if ((std::chrono::steady_clock::now() - lastTime) >= (CPUCycles * 500ns))
两个对象之间的差异是a,它不容易从任何数字转换。您必须显式构造一个适当的duration对象 有一些标准化的持续时间别名,如
std::chrono::nanoseconds
,您可以将其用作std::chrono::nanoseconds(500)
:
或者,如果使用std::literals::chrono_literals
名称空间,则可以使用“用户”定义literalns
:
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
,我可以同时看到它们