clock()
から生成されたクロックティックカウントに関する質問<ctime>
。(の使用法は他の質問clock()
でカバーされています)
私のシステムには、コンパイラによる最大値が2147483647のclock_t
エイリアスがあります。long
<climits>
clock_t delay = clock_t(10) * CLOCKS_PER_SEC;
clock_t start = clock();
while(clock() - start < delay); //Note Semi-colon here makes this null statement
std::cout << clock();
これを実行すると、およそ10060になります。これは、d(私のシステムの場合)が1000であることと一致しCLOCKS_PER_SEC
ています。#define
したがって、1000の場合CLOCKS_PER_SEC
、2147483647 / 1000 = 2147483.647秒になります。これは、およそ24〜25日であることがわかります。
それが実際にC++によって定義された動作であるかどうかはわかりませんが、long
制限を超える一般的な動作は負の端にラップすることであることに注意してください。
例えば、
long m = long(2147483647);
std::cout << ++m << std::endl;
出力されます:-2147483648
したがって、プログラムが初期化する前に長時間実行されていてstart
、start
たまたま2147483647(可能な最大long
値)に初期化されたとします。
この時点で、clock()
2147483647に再び近づいているときに、-2147482649などの値を取得することによって返された値のラップを開始すると思います。したがって、私の元のコードは、ループを完了するのにおそらく非常に長い時間がかかり、意図した遅延よりもはるかに長くなります。
実際の動作ですか?このスタイルの一時停止は、特定の量未満の遅延にのみ使用する必要がありますか?これを「安全」にするために行われるべき他のチェックはありますか?