私は次のようにクロノ持続時間を使用しようとしていますが、上記のいずれかに比率を増加させると、elapsed -= tickeRate
の場合にはerror: no viable overloaded '-='
のコンパイル時にエラーが発生します。なぜ小さいクロノ::期間が減算されませんか?
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