![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_01.png?e8efa67)
プログラムを実行していると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ランキング
-
このプログラミング誰か教えて...
-
自動で施設の空きを通知するプ...
-
API、OCX、DLLって何でしょう?
-
出欠表のプログラム制作の難易...
-
プログラミングって謎解きと似...
-
Macで動くプログラムを作りたい。
-
VBプログラムをEXCEL VBAに移植...
-
GUIデザインツールを探していま...
-
1年無職の彼氏 別れるべきですか?
-
機械工学専攻の院卒でSEになる...
-
相続支援コンサルタントとは?
-
特定の語句だけ検索制限をかけたい
-
Excelで用語辞典を作成するには?
-
embedタグでFirefox右クリック禁止
-
全豊田作業責任者
-
就活の面接で、業界について勉...
-
6~7割の正解で、なぜ合格?
-
MOTに詳しい方教えて下さい。
-
自分のサイトで相互はSEO上あま...
-
と、あるサイトにHPが登録さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
API、OCX、DLLって何でしょう?
-
VBプログラムをEXCEL VBAに移植...
-
C言語のHP-UXからLinuxへのポ...
-
OSとCPUの関係について
-
コンソールアプリでファイル選...
-
SNMPトラップ情報をC#.netで作...
-
WEBページに読み書きするプログ...
-
変数の大きさを超える代入
-
Perl5とActivePerl
-
UNIX環境でのCプログラム上でC...
-
.Net とは何ですか?
-
3ウェイハンドシェイクの流れ...
-
i,j,k
-
DLLってなに?
-
VBS:コンピュータ名を取得し、...
-
Ryzen 3700(無印)はWin11に対応...
-
CGIとは?
-
プログラミング 素数か素数では...
-
プログラマやシステムエンジニ...
-
このプログラミング誰か教えて...
おすすめ情報