我正在尝试按如下方式使用计时持续时间,但如果我将该比率增加为高于std::ratio<1,50>
的任何值,则会在编译期间引发error: no viable overloaded '-='
时发生的错误elapsed -= tickeRate
。为什么不会减小chrono :: durations?
int main()
{
using clock = std::chrono::high_resolution_clock;
using seconds = std::chrono::seconds;
std::chrono::duration<long long, std::ratio<1,20>> tickRate(1);
// std::chrono::duration<long long, std::ratio<1,60>> tickRate(1);
clock::time_point start, stop;
start = clock::now();
std::this_thread::sleep_for(seconds(1));
stop = clock::now();
clock::duration elapsed = stop - start;
int i = 0;
while (elapsed >= tickRate)
{
elapsed -= tickRate;
i++;
}
std::cout << "ticked " << i << " times." << std::endl;
return 0;
}
第一个问题是,为什么它只在tickRate
> 1/50时抛出错误?第二,我可以研究什么课题,以便我可以通过未来的问题推理?
编辑:
编译器版本是:苹果LLVM 7.0.2版(铛-700.1.81)
此外,该实际工作有更小的数字,但不能肯定它。对我来说,1/51 .. 1/99失败,但是1/100开始再次正常工作。我尝试过双打,并且1/2500,1/3600扔同样的错误。现在我更加困惑。
在我的机器上它可以很好地适用于'100','200'和'1000'。可能这个比例应该可以被一些数字整除。 – alexeykuzmin0
你的编译器是什么? – rustyx
似乎是这样。自从失败后,我从未超过60岁,但在您说出这一点之后,我尝试了不同的较小值。我会更新这个问题。谢谢。 – stewsims