2011-01-31 7 views
0

私のプログラムでは10秒ごとに何かする必要があり、C++コンソールアプリケーションではその方法を知りません。 C#ではタイマーを作成することができましたが、ここでは苦労しています...タイマーを作成するにはどうすればよいですか? (X秒/分/時間ごとに何かをしてください)

sleep();あなたのプログラムがX秒間非アクティブになることがわかっている限り、私のアプリはアクティブで働き、常に計算されている必要があります。

、私はC++に非常に新しいですし、ATMを学んで、この小さな(または大きな?)問題で私を助けてください:)

だから私はBOOSTライブラリを設定して、今、私はこのような何かをやっています。

boost::timer t; 

while (true) 
{ 
    if (t.elapsed() > 1) 
    { 
     cout << t.elapsed() << endl; 
     t.restart(); 
    } 
} 

これで十分ですか、より良い方法があるはずですか?ああ、それは非常に悪いです、私のCPUの25%を直感的に食べています。 :(

+4

睡眠を()あなたが別のスレッドでそれを置く場合はオプションです。 –

+0

正確には10秒でなければなりませんか?あなたのアプリは「すべての時間を計算している」ので、外側のループの1つにifステートメントをスローし、現在の時刻をチェックし、スケジュールされた時間の後であれば定期的な仕事関数を呼び出し、次に実行する必要があります。 –

+0

PigBenとBenの両方が言ったことから、正確さはどれくらい必要ですか?スレッドが1つしかない場合は、おそらくそこに何らかの睡眠を取ることができます(おそらく10ミリ秒です)。ウィンドウでは 'Sleep(10);のようになり、* nixでは' usleep(10 * 1000);のようになります。 // 10マイクロ秒* 1000 = 10ミリ秒 ' – RageD

答えて

6

ブーストタイマライブラリを持っています。実際に

、すでにブーストに遭遇していない場合、私はあなたはそれが非常に役立つと確信しています。


イベントベースのタイマーを実行するには、this answerをご覧ください。

+0

ありがとう、私はブーストに固執すると思います。機能が非常に豊富で使いにくいとは思えません。 – sed

+0

ねえ、私はそれを稼働させて、今はタイマーが見えます。私のタイマー方法が十分に良いかどうか見てください:) – sed

関連する問題