1

顧客が 10 ~ 50 秒ごとにカフェテリアに入るカフェテリアをシミュレートするプログラムを書きたいと思います。そのため、呼び出される関数に存在するメニューカードを表示するために、10〜50秒ごとに呼び出される関数が必要でした

4

4 に答える 4

6

Boostライブラリはこれを Boost.Asio で提供し、チュートリアルで明示的にカバーしています。

  • 同期タイマー、つまり、タイマーが期限切れになるまで待機します。

  • 非同期タイマー、つまり、プログラムを続行し、タイマーが切れたときにコールバック関数を呼び出します。

Web で C++ を検索しても Boost ライブラリが見つからない場合は、google-fu が脆弱です。;-)

于 2013-03-28T13:43:42.947 に答える
4

メインループで時間を取得し、最後に関数を呼び出した時間と比較します (宣言時に「今」に初期化されます)。間隔よりも大きい場合は、関数を呼び出して、「最後に呼び出された」変数を現在の時刻に設定します。

于 2013-03-28T13:32:36.770 に答える
1

よりクロスプラットフォームで c++ STL を利用するタイマーについては、C++ Cross-Platform High-Resolution Timerを参照してください。

そこから、上記のクロスプラットフォーム タイマーの 2 つを使用して、10 ~ 50 秒ごとにループで関数を作成して呼び出すだけです。

于 2013-03-28T14:06:31.510 に答える
1

2 つのアプローチがあります。 1.非同期 2.同期

  1. Win32、C++ を使用していると仮定します。Win32 API SetTimerを使用できます

    UINT_PTR timerid = SetTimer(NULL, 0, ミリ秒, &callback);

  2. ポーリングアプローチが必要な場合は、そのようなものを使用することをお勧めします

      for(;;) 
        {
    
        Say_Hello();
        // Sleep for 50*1000ms
        Sleep(50000);
    
        }
    
于 2013-03-28T13:34:11.100 に答える