clock()
メソッドを使用して単純なタイマーを作成しようとしています。アプリケーションが実行されると、CPU使用率が0%から25%にジャンプします。数秒で60から0までカウントするだけの単純なプログラムでは、少し余計です。このためhttp://www.cplusplus.com/reference/clibrary/ctime/clock/"clock()"でCPU使用量が過剰になるのはなぜですか?
どれ理由:
私はこの次のようでしたか?私が使うことのできる選択肢はありますか?
clock()
メソッドを使用して単純なタイマーを作成しようとしています。アプリケーションが実行されると、CPU使用率が0%から25%にジャンプします。数秒で60から0までカウントするだけの単純なプログラムでは、少し余計です。このためhttp://www.cplusplus.com/reference/clibrary/ctime/clock/"clock()"でCPU使用量が過剰になるのはなぜですか?
どれ理由:
私はこの次のようでしたか?私が使うことのできる選択肢はありますか?
を参照してください:あなたが参照
http://msdn.microsoft.com/en-us/library/ms686298%28v=vs.85%29.aspx
コード:合格するための時間を待っている間に
while (clock() < endwait) {}
は明らかにちょうどしたがって、CPUをかむます25%の使用率(1つのコア)。
while (clock() < endwait) { Sleep(1);}
は、問題を解決するはずです。
// sleep for one second
boost::this_thread::sleep(boost::posix_time::seconds(1));
あなたの問題は、clock
の機能ではなく、wait
の機能であると思われます。
一定の時間が経過するまでループします。 sleep
関数のように、プログラムを実際に中断する関数を使用する必要があります。
ほとんどの簡単なタイミングテストは、このようないくつかの擬似コードで実行優れている:Unixの由来プラットフォームで
start = get_time()
for 1 .. 10:
do_the_task()
end = get_time()
diff = end - start
print "%d seconds elapsed", diff
、かなりまともになりエポック、からの秒とマイクロ秒で構造体を返しますgettimeofday(2)
解像度のタイミング。他のプラットフォームでは、まともな時間ソースを探す必要があります。
返信いただきありがとうございます。 'sleep()'の別のスレッドを作成する必要がありますか?私は同時にタイマーを実行する必要があるので。 – DeadCapacitor
上記の編集を参照してください。明らかにもっと精巧な解決策がより精巧な問題に当てはまるかもしれませんが、タイマーや時計を管理するためだけに新しいスレッドは必要ないはずです。 – Keith
ありがとう、キース。それがそれを解決しました。 – DeadCapacitor