

プログラムを実行していると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ランキング
-
CとC++の違い
-
絵とプログラムの両立
-
Perl/CGIプログラムとPHPプログ...
-
大学でプログラムを作っている...
-
C/C++でチャットソフトを作りた...
-
ニンテンドーDS用、自作プロ...
-
VB2005の自作ブログラムをWin10...
-
CPUの構造を理解する意味は?
-
プログラムの基本は一応学びました
-
VBプログラムをEXCEL VBAに移植...
-
InternetのDNSシステムの稼働の...
-
VisualBasic習得に必要な知識
-
企業用のホームページ作成ソフト
-
プログラムから別のアプリケー...
-
1年無職の彼氏 別れるべきですか?
-
スクリーンセーバーの作り方
-
サイト内のキーワードがどれぐ...
-
6~7割の正解で、なぜ合格?
-
パソコンの資格を教えてください。
-
webサーバが攻撃を受けている時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
API、OCX、DLLって何でしょう?
-
コンソールアプリでファイル選...
-
Ryzen 3700(無印)はWin11に対応...
-
VBプログラムをEXCEL VBAに移植...
-
C#のプログラムを読むコツって...
-
VB.net エラーメッセージを英文...
-
SNMPトラップ情報をC#.netで作...
-
Perl5とActivePerl
-
バージョンのつけ方
-
OSとCPUの関係について
-
Cからgzip圧縮について
-
Sleep命令で指定した待機時間が...
-
C/C++でチャットソフトを作りた...
-
C言語のHP-UXからLinuxへのポ...
-
CoInitializeSecurityが失敗する
-
DeviceIoControlを使って、フロ...
-
変数の大きさを超える代入
-
基本的な質問ですみません:ソ...
-
地域と言語のオプションをプロ...
-
PCソフトを作ってみたいです!!
おすすめ情報