当前位置: 首页 > 知识库问答 >
问题:

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

金阳曜
2023-03-14

我正在开发一个模拟器,我不知道如何将计时库测得的运行时间与固定的数字进行比较,例如(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二进制'


共有2个答案

经清野
2023-03-14
匿名用户

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

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

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

或者,如果使用std::literals::chrono\u literals命名空间,则可以使用“user”define literal

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

漆雕欣德
2023-03-14

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

那么您的CPUCycles*500以纳秒为单位返回持续时间?(0.0000005==500e-9)然后告诉编译器:

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

看看这表达了什么意思?每500ns有1个周期-

另一种方法是使用成员函数获取持续时间的计数,但您通常希望先转换持续时间:

auto diff = std::chrono::steady_clock::now() - lastTime;
if(std::chrono::duration_cast<std::chrono::nanoseconds>(diff).count() >= CPUCycles * 500) ...

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

 类似资料:
  • 我想用Java模拟TCP。 我找到了System.nanotime()方法,但是没有方法可以在指定的微秒或纳秒内阻塞线程。如果有这样的方法,那么请让我知道。system.nanotime()只是给出了以纳秒为单位的相对时间间隔。 我可以使用System.nanotime()在使用busy-loop的线程中执行纳秒级延迟,但这将浪费CPU时间,而CPU本来可以用于接收数据线程或处理线程。 另一个令人

  • 问题内容: 在Windows下,有一些方便的功能,如from 可以创建高分辨率计时器。Linux有类似的东西吗? 问题答案: 在此之前ows-queryperformancecounter-on-osx)有人问过它-但是基本上,您可以使用boostptime函数,或者可以基本实现相同目的的POSIX clock_gettime()函数。

  • 好的,这里有一个奇怪的问题,我有问题(用gcc btw编译) 下面是用于命令提示的Mandelbrot分形生成器的源代码。我以前做过这项工作,我想加快自己的测试速度,看看我能以多快的速度生成命令提示符中实际生成Mandelbrot分形所需的代码。我经常这样做是为了给自己找点乐子 不管怎样,我遇到了一个新问题,我不太明白问题是什么。当分形呈现时,无论我设置了多少次迭代或什么转义值,它都将始终显示为椭

  • 问题内容: 我想用Java模拟TCP。 为此,我有多个线程,例如每个TCP连接的发送者和接收者线程。 我的问题是,我想暂停(如Thread.sleep())线程数微秒的时间间隔。这样我就可以模拟流控制,发送者线程将在发送下一个数据包之前阻塞几微秒,同时接收和数据处理线程可以使用CPU。但是我找不到任何执行sleep()或wait()的方法来获得微秒或纳秒分辨率。如何以微秒或纳秒分辨率阻塞(暂停)J

  • 问题内容: 我已经使用matplotlib绘制了一些实验结果。但是,通过单击图像右侧来保存图片会产生非常差的质量/低分辨率图像。 我正在寻找的示例图:示例图 问题答案: 您可以用来导出到图像文件: 另外,您可以为某些标量值指定参数,例如:

  • 功能介绍 获取百度移动统计平台的全部屏幕分辨率列表 接口 https://openapi.baidu.com/rest/2.0/mtj/svc/config/getScreenList?access_token={ACCESS_TOKEN} 请求参数 参数名 类型 描述 样例 access_token string 用户登入后获取的token 1.a6b7dbd428f731035f771b8d