
No.2ベストアンサー
- 回答日時:
環境が分からないので正確なことは何も分かりませんが...
> sleep関数の精度はどれくらいあるのでしょうか?
POSIXのsleep関数のことであれば、引数を1秒単位でしか指定できないので、1msの精度を出すことはそもそも無理です。
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
> Sleep(1)とSleep(10)では、違いが無いような気がします。
Win32 APIのSleepは1ms単位で指定しますが、それほど高い分解能はありません。
http://www.microsoft.com/japan/msdn/library/defa …
この回答への補足
書き込みありがとうございます。
OS:Windows XP
ソフト:Visual C++ 7.0ですが、C言語をしています。
Sleep以外の関数でも、ほぼ同様のことが言えてしまうのでしょうか?
1msの精度を得るためには、ダミー処理(ループを使った簡単な計算)をさせることで、回避できないものか・・・と思っています・・・。
No.6
- 回答日時:
No.4です。
ごめんなさい。書き違いがありました。指摘どおり、きっちり遅延できたのはnanosleep()のほうです。
確かにうちのは2.4カーネルで、スケジューリングは10msです。
select()はタイムアップ後にスケジューラが起こしてくれるまで
遅延するので周期起床用の休眠の代わりに使ってます。
No.5
- 回答日時:
No.4さんへの補足ですが
Linux 2.6カーネルだとタイマー割込み周期は1ミリ秒です。最小待ちは2ms程度になるでしょう。
また前に見た(Linux2.4のころの)nanosleepの実装ではリアルタイム・プロセスで2ミリ秒以下の待ちを指定するとビジーウェイトするようになってました。これを使うと精度は出せますがCPU負荷が高すぎますね。
# nanosleepのマニュアルによるとこの機能は2.6カーネルでは削除されているようです
ご提示ありがとうございます。
Redhat環境が、身近にありましたので今後試してみたいと思います。
今後とも、よろしくお願いします。
No.4
- 回答日時:
LInuxだとusleep()やnanosleep()がありますよ。
類似機能を探してみては。
RedHatだとselect()で2ms以下を指定すればCPUタイマから
すぐに起床しました。
優先度を上げてやらないと起床タイミングはカーネルのスケ
ジューリング周期(たいてい10msかと)に支配されると
思います。
参考URL:http://www.linux.or.jp/JM/index.html
No.3
- 回答日時:
sleepのような時間待ち処理の精度はOSのタイマー割込み周期に依存します。
この周期は少し前までのWindowsやPC用Linuxでは10msが普通でした。最近のPC用Linuxでは1msになっていますが、Windowsの最新状況は未確認です。
時間待ち処理では、このOSタイマー割込み処理にプロセスを登録して待ちに入り、指定時間を越えた最初のタイマー割込みでプロセスを起こします。
このため精度は概ねタイマー割込み周期程度、最小待ち時間はタイマー割込み周期の倍程度になります。
これ以上の短時間待ちにはCPUを使いつつ待ついわゆるビジーウェイトが必要ですが、この間は他のプロセスが止まりますし、普通のプロセスではCPU時間の使いすぎでプリエンプトされる可能性もあるのであまりお薦めではないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6.0 SHELLで起動...
-
フレームワークとプロセスの違...
-
プロセスの停止
-
Linuxでのスレッド間メッセージ...
-
プロセスが実行中かどうか調べ...
-
C言語のプログラムにて二つの処...
-
ADOでアクセスのレコードに...
-
デスクトップ上のアイコン名の...
-
services.exeが延々と。
-
fork()で作られた子プロセスか...
-
Macターミナルで実行中のプログ...
-
スロットゲームのプログラミング
-
STATUSのZフラグについて
-
CImage::ReleaseDC()のエラーで...
-
あるプログラム実行中に別のプ...
-
「単体テスト」に関する深刻な...
-
このレジの並び方は間違ってま...
-
CreateCompatibleDCを初期化時...
-
ACCESS側からEXCELの書式を設定...
-
VBA kernel32 の意味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
プロセスのアタッチ・デタッチ...
-
非表示になったエクセルは?
-
C#でのbatファイル実行結果取得
-
Process.Startの戻り値を後で取得
-
タスクマネージャーのプロセス...
-
SendMessageが失敗するときがある
-
VB6.0 SHELLで起動...
-
Linuxでのスレッド間メッセージ...
-
vb.netでEXCEL起動がうまくでき...
-
explorer.exeが異様にメモリを食う
-
プロセスIDの取得方法について
-
IISがフリーズ
-
jdbcのプロセスの処理について
-
c言語でプロセスIDを調べたい
-
セマフォとmutexの違いは?
-
警告『 別のプロセスで使用され...
-
ADOでアクセスのレコードに...
-
OSPFでプロセスを分ける意義に...
-
Windowsでのfork方法
おすすめ情報