お世話になります。VC++で作成したアプリケーションを次の2つのPC
PC1(200MHz、WinNT)、PC2(800MHz、Win2000)で動作させ、その中で実行している0.1[s]のSleep
がどの程度正しく0.1[s]なのかを計ってみました。
するとPC1では、0.10014[s]程度でありますが、PC2では0.004~0.009[s]となります。
クロックの違い、他プロセス状況を考慮しても、誤差範囲と思えませんし、短くなるのも
おかしな気がします。何か要因と思われることがございましたら、ご教示ください。
宜しくお願いいたします。
時間計測している部分の問題ではないでしょうか?
ソースコードを提示してください。
Sleepは他のスレッドがあるとそっちに制御がうつっちゃうから
同時起動している他プロセスの影響を受けますよ。
環境はWin2K,VC6,cpuはP3-750MHzくらいで下記のコードを試しました
1回しかやってないけど結果は100344で
あるさんが書かれているほどの値を連発しているようには思えませんでした
時間を調べる関数の精度もあると思いますが、0.004~0.009[s]というのは変ですね
もう何台かマシンがあるようでしたら、そちらでも試してみたほうが良いかもしれません
DWORD dwA = 0;
int n;
for (n = 0; n < 1000; n++) {
DWORD dw1 = timeGetTime();
Sleep(100);
DWORD dw2 = timeGetTime();
dwA += dw2 - dw1;
}
CString strDisp;
strDisp.Format(%d, dwA);
MessageBox(strDisp);
下記のページが参考になるかもしれません
http://www.ovit.co.jp/old/tech/sleep_win2k.htm
GetTickCount APIで時間を計測してみたところほぼ0.1[s]の結果を得ました。
実は、Real-Time Extentionを組み込んでまして、そちらのAPIもしくは、ツール
の問題ではないかというところで現在調査中です。そういう事情でソースコード
提示も適当ではないかと考え控えておりました。
Winでのプログラミングの経験がほとんど無いために、もっと基本的な誤りが
ないかと考え、取り急ぎご相談させていただきました。
ご親切にレス頂きました方々、本当にありがとうございます。
結果は、またご報告させていただきたいと思います。