- 締切済み
クロック周波数
はじめまして。初心者ですが質問させてください。 一定時間プログラムを止めておく関数にSleep()があると思うのですがカッコ内にはいるのは1000分の1秒単位です。もっと小さい単位でプログラムを止めておきたいと考えています。 具体的には、CPUのクロック周波数の時間だけプログラムを止めておきたいのですがどのようにすればよいでしょうか? 現在は関係のないfor(h=0;h<t;t++){}といったプログラムをはさむことで時間を制御(プログラムを止めている)しています。 どなたか知恵を貸していただけないでしょうか?よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- sha-girl
- ベストアンサー率52% (430/816)
言語の問題ではなくOSに依存します。 マルチタスクで動くOSでは同じ命令数であっても優先順位やバックグラウンドでうごいている他のプロセスもあるので ミリ秒以下の精度はあまり期待はできません。 もしそれでもいいなら分解能を使います。 WindowsならAPIのQueryPerformanceCounterや QueryPerformanceFrequency等を使って そのカウンターを監視させるというかんじになると思います。 (CPUがマルチコア/CPUな場合SetThreadAffinityMaskを使って明示的にCPUを指定する必要があるようです。) あと自分自身のスレッドはSetThreadPriorityで優先順位を最高に 設定しておくと良いでしょう。
- roygbiv
- ベストアンサー率14% (1/7)
たぶん無理だと思います。 参考ですが、時間に関してはこんなのもあるみたいです。 http://www.sm.rim.or.jp/~shishido/mmtimer.html
- php504
- ベストアンサー率42% (926/2160)
そこまで細かい精度を求めるならCでは無理だと思います。 コンパイラによって結果も変わるでしょう。 アセンブラなら各命令に必要なクロック数が分かるので止めたいクロック数だけ無駄な命令を実行するだけです。