0
void Wait(double Duration)
{
    clock_t End;
    End = clock() + (Duration*CLOCKS_PER_SEC);

    while (clock() < End)
    {
        // This loop just stalls the program.
    }
}

私の関数は半分の時間は完全に機能しますが、プログラムが呼び出される前に停止することがあります。たとえば、次のスニペットを見てください。

cout << "This is\n";
Wait(2.5)
cout << "a test!";

最初の行がすぐに表示され、2.5 秒後に 2 行目が表示されると思われますが、2.5 秒後に ALL が表示されることがあります。どうしたんだ?

4

4 に答える 4

4

試す

cout.flush();

あなたの待つ前に

于 2010-11-09T18:51:09.593 に答える
4

これは、I/O バッファリングが原因である可能性があります。出力バッファを手動でフラッシュする必要があります (<< endl代わりに試す'\n'か、書き込みますcout.flush)。

于 2010-11-09T18:51:47.733 に答える
2

試すcout << "This is" << endl;

クロックの問題ではなく、バッファリングのようです。

于 2010-11-09T18:50:45.517 に答える
2

flush()/std::endl は既に言及されていますが、待機中に 1 つのコアを 100% 消費するつもりですか? これがwhile()ループが行っていることです。「待機」に対するより適切なアプローチが必要な場合は、次のいずれかを検討してください。

  1. boost::thread::sleep() - ミリ秒の粒度
  2. アラーム (1 秒の粒度)
  3. 選択する()
  4. pthread_cond_timedwait()

于 2010-11-09T19:06:41.367 に答える