プロが教えるわが家の防犯対策術!

はじめまして。初心者ですが質問させてください。
一定時間プログラムを止めておく関数にSleep()があると思うのですがカッコ内にはいるのは1000分の1秒単位です。もっと小さい単位でプログラムを止めておきたいと考えています。
具体的には、CPUのクロック周波数の時間だけプログラムを止めておきたいのですがどのようにすればよいでしょうか?
現在は関係のないfor(h=0;h<t;t++){}といったプログラムをはさむことで時間を制御(プログラムを止めている)しています。
どなたか知恵を貸していただけないでしょうか?よろしくお願いします。

A 回答 (3件)

言語の問題ではなくOSに依存します。


マルチタスクで動くOSでは同じ命令数であっても優先順位やバックグラウンドでうごいている他のプロセスもあるので
ミリ秒以下の精度はあまり期待はできません。

もしそれでもいいなら分解能を使います。
WindowsならAPIのQueryPerformanceCounterや
QueryPerformanceFrequency等を使って
そのカウンターを監視させるというかんじになると思います。
(CPUがマルチコア/CPUな場合SetThreadAffinityMaskを使って明示的にCPUを指定する必要があるようです。)
あと自分自身のスレッドはSetThreadPriorityで優先順位を最高に
設定しておくと良いでしょう。
    • good
    • 0

たぶん無理だと思います。



参考ですが、時間に関してはこんなのもあるみたいです。

http://www.sm.rim.or.jp/~shishido/mmtimer.html
    • good
    • 0

そこまで細かい精度を求めるならCでは無理だと思います。


コンパイラによって結果も変わるでしょう。
アセンブラなら各命令に必要なクロック数が分かるので止めたいクロック数だけ無駄な命令を実行するだけです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!