

プログラムを実行しているとSleep命令で指定した時間と、実際に待機する時間が食い違うケースが発生しています。例えば、
DWORD a = timeGetTime();
Sleep(16);
DWORD b = timeGetTime() - a;
のようなコードを作成した場合、bの値は31となり、予定の2倍近くウェイト処理を行っています。この原因はOSにあるのでしょうか、それともプログラムにあるのでしょうか。
なお、開発環境はWindows Vista Ultimate、Visutal C++ 2005 SP1です。
No.2ベストアンサー
- 回答日時:
ちなみに、timeGetTimeの精度自体が、明示的に設定しないと、
かなり悪い(5ms以上)になる可能性もあるのですが確認していますか。
# 例えば二回のtimeGetTimeが+5ms/-5msずれると計10msズレます。
timeBeginPeriod は使ってますか?
timeBeginPeriodをプログラムに編入したところ、Sleepの待機時間が正確になりました。MSDNのSleep()の項目では一切言及されていなかったので、MrBanさんの回答がなければ解決することはできなかったでしょう。ありがとうございます。
No.1
- 回答日時:
Windowsに限らずLinuxなどでも、マルチタスクな高級OSの多くは時間の保証をしません。
仕様/方式上の問題ですので、アプリでは「ちょうど16ms」の待機は不可能です。
# 日本の電車のダイヤみたいなベストエフォートで、
# 現実的にだいたい16msだとしても、実は混んでれば(重いプログラムが走ってたり)
# 簡単に遅れる可能性があります。
# まともな制御精度も10msとかの世界です(参照はもっと高精度になりますが)。
WindowsAPIにおいても、Sleepで指定できるのは「最低16ms以上待機する」ことだけなので、
それでもかまわないようにソフトは設計されなければなりません。
どうしても16msちょうどにする必要があるなら、理由にもよりますが、
リアルタイムOS(RTOS)と呼ばれるちょっと特殊なOSを使うとか、
Windowsであればドライバを作成するなどの必要性が出てきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
- Visual Basic(VBA) vba Sleep関数について教えてください 1 2023/01/18 10:18
- Windows 10 (続き2)2つのウィンドウ選択時の表示について 3 2023/08/21 22:41
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- その他(コンピューター・テクノロジー) 量子コンピュータの動作原理がわかりません。同じビットが、1でも0でも有って良いだろうか? 3 2023/02/04 03:20
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- 日本語 文章訂正 5 2023/04/01 18:56
- Windows 10 Windows11 スリープではなく休止になってしまう 2 2023/04/04 12:46
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
- Java Javaの問題なのですが、 永久ループを使って以下に従って数値を出力するプログラムを作成する。 ・1 3 2023/06/06 18:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Visual Basic と VC++ のちが...
-
C言語でプログラムを作りたい
-
API、OCX、DLLって何でしょう?
-
VBプログラムをEXCEL VBAに移植...
-
DLLとプロジェクト
-
プログラミング言語について御...
-
C言語について教えてください。
-
コンソールアプリでファイル選...
-
UNIX環境でのCプログラム上でC...
-
SEってなに?
-
Perl5とActivePerl
-
セカンドライフのアルゴリズム
-
C言語プログラミング 逆行列を...
-
SNMPトラップ情報をC#.netで作...
-
現在プログラミングの研修中な...
-
ASPとASP.NET両方の...
-
個人プログラミング
-
ランチャーの作り方について教...
-
三目並べ
-
Ryzen 3700(無印)はWin11に対応...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
API、OCX、DLLって何でしょう?
-
VBプログラムをEXCEL VBAに移植...
-
Ryzen 3700(無印)はWin11に対応...
-
SNMPトラップ情報をC#.netで作...
-
バージョンのつけ方
-
コンソールアプリでファイル選...
-
OSとCPUの関係について
-
VBのフリーウェアについて
-
Sleep命令で指定した待機時間が...
-
ニンテンドーDS用、自作プロ...
-
CoInitializeSecurityが失敗する
-
Perl5とActivePerl
-
VB.net エラーメッセージを英文...
-
C#のプログラムを読むコツって...
-
ASPとASP.NET両方の...
-
winsockへの疑問
-
言葉について教えてください
-
VisualBasic習得に必要な知識
-
VBで暗号化した文字列をJavaで...
-
ドコモのソフトウェア更新について
おすすめ情報