1

プログラムが数秒後に何かを実行できるように、C++で「タイマー」関数を実装しようとしています。しかし、予期しない結果が出ました。

short e, sum;
clock_t start;
double duration=0;

for (e=0; e<4; e++) {
    start = clock();
    while (duration < 1) {

        duration = (clock() - start)/(double)CLOCKS_PER_SEC;
    }
    cout << duration;
    duration = 0;
    sum += e;
    /* Calculate EPOCH error */
    cout << e;
}
cout << "\n" << e<< "\n";

私が期待する結果は次のとおりです。

  • 毎秒コンソール出力、その後にe(0,1,2,3)
  • 実行の最後に、合計が0 + 1 + 2 + 3=6になると予想します。

得られた結果:

  • コンソール出力の後にeが続き、実行が終了するとすべて一緒に
  • 合計=6

私が不確かだと思うのは、なぜプログラムは実行が終了するまでコンソールに出力し、期待どおりに毎秒ではないのですか?

乾杯、

4

1 に答える 1

1

問題は、ループ中に出力ストリームがフラッシュされないことです。実際、コンソールにテキストを書き込むには、いくらか費用がかかります。したがって、入力はバッファリングされ、フラッシュが発生したときにのみコンソールに書き込まれます。ストリームのフラッシュは、ストリーミングによって実行できますstd::flush

    cout << e<<std::flush;

std::endl改行を追加することに加えて、ストリームもフラッシュします(書き込みもそれを行う\n 可能性がありますが、それは保証されません)。

補足として:出力を読みやすくするために、数値の間にある種の区切り文字を追加することを検討することをお勧めします。

于 2012-12-11T22:05:15.580 に答える