使用chrono c ++与时间进行比较

问题描述

我想说的是“只要我们在一定时间内,就可以继续进行迭代”

代码看起来像

int time = atoi(argv[1]);
auto start = std::chrono::high_resolution_clock::Now(); 
while((std::chrono::duration_cast<chrono::milliseconds>(std::chrono::high_resolution_clock::Now() - start).count()) < time){
            /*perform operation*/
  }

但是我无法与这样的时间进行比较,并得到错误error: conversion to ‘double’ from ‘std::chrono::duration<long int,std::ratio<1,1000> >::rep {aka long int}’ may alter its value [-Werror=conversion]

有人知道如何使用chrono与小于操作符进行比较吗?

解决方法

错误在优先级上,您在count()函数之后执行了强制转换,这导致强制转换超过double值。

可以通过以下方式解决问题:

int time = atoi(argv[1]);
auto start = std::chrono::high_resolution_clock::now(); 
while(((std::chrono::duration_cast<chrono::milliseconds>(std::chrono::high_resolution_clock::now() - start)).count()) < time){
            /*perform operation*/
  }
,
int time = atoi(argv[1]);

time是什么单位? secondsnanoseconds?对于这个答案,我假设使用seconds,但将其更改为您需要的任何值:

std::chrono::seconds time{atoi(arv[1])};

下一步:

auto start = std::chrono::high_resolution_clock::now();

high_resolution_clock将成为system_clocksteady_clock的类型别名。 The top of this answer explains the difference.我建议根据您的需要选择system_clocksteady_clock,而不要让供应商为您选择。

while((std::chrono::duration_cast<chrono::milliseconds>(std::chrono::high_resolution_clock::now() - start).count()) < time){
            /*perform operation*/
  }
  • 始终尝试停留在计时类型系统中,而不要使用.count()退出它。退出chrono库后,它将不再对您有帮助。在这种情况下,这意味着使用计时单位而不是int进行比较。

  • 比较计时单位时,不需要强制转换使得比较的两边都是相同的单位。例如,可以比较secondsmilliseconds。 chrono会考虑不同的单位正确进行比较。

我喜欢发布功能范围using namespace std::chrono,因为我发现重复的std::chrono::过于冗长,使代码更难阅读。

using namespace std::chrono;
seconds time{atoi(arv[1])};
auto start = steady_clock::now();
while(steady_clock::now() - start < time)
{
     // perform operation
}

或者您可以代数重新排列:

while(steady_clock::now() < start + time)
{
     // perform operation
}

在rhs中加上“常量”,您可以收集并重命名该名字:

auto finish = steady_clock::now() + seconds{atoi(arv[1])};
while(steady_clock::now() < finish)
{
     // perform operation
}

以上所有内容都是等效的,因此您可以选择更易读的内容。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...