電子書籍の厳選無料作品が豊富!

C/C++でプログラムを作成していますが,(MicroSoft Visualstadio C++6.0)で

int main()
{
time[1000];
clock_t t1,t2;
t2 = 0;
for(int i = 0;i < 1000;i++)
{
.
.
Sleep(10)
t1 = clock();
time[i] = t1-t2;
t2 = clock();
}
//エクセルでtime[]を書き出す
}

としてfor分の中のループ1回分の周期を10msにしようとしているのですが,time[]をエクセルで書き出すと15msになってしまいます.
ループ1回分を一定の時間で処理させるにはどうしたらよいのでしょうか.
ループ1回分の周期は50ms以下で実行できれば問題ありません.また誤差1ms未満であれば問題ありません(できればあまり大きくないほうがよい).上のプログラムではSleepを使ってますが別にこだわっている訳ではなくほかに方法が分からなかっただけです.できれば簡単なプログラムのようなものを付けて,分かる方はどうか教えてください.

A 回答 (2件)

timeBeginPeriod(1) をするとSleep(を含むタイマー)の精度が上がります



参考URL:http://d.hatena.ne.jp/NyaRuRu/20060910
    • good
    • 0

for loop 内で他のプログラム(スレッド)に制御が渡ると駄目なので


割り込み禁止状態にする必要があります。
しかしこれはアプリでは出来ないので優先順位を最上位にすればそれに近くなりますが、Windowsのプログラムとしては無理があると思います。
リアルタイムOSの領分かと。
    • good
    • 1

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