
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
- Visual Basic(VBA) vba Sleep関数について教えてください 1 2023/01/18 10:18
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
- 英語 不特定のyouが主語の疑問文に対する応答法 2 2023/07/05 09:04
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- Windows 10 Windows11 スリープではなく休止になってしまう 2 2023/04/04 12:46
- その他(プログラミング・Web制作) cryptcatのビルド 4 2022/07/21 14:55
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
VB6.0 SHELLで起動...
-
怪しいプロセス教えてください。
-
共有メモリの同時アクセスにつ...
-
プロセスIDの取得方法について
-
フレームワークとプロセスの違...
-
実行中のプログラムIDが取得...
-
WSH.Runで待機できません
-
ActiveXでIEウインドウの最小化
-
vb.netでEXCEL起動がうまくでき...
-
共有メモリ方式とメッセージパ...
-
プロセスのアタッチ・デタッチ...
-
UNIX_Cにおける「名前つきパイ...
-
OSPFでプロセスを分ける意義に...
-
セマフォとmutexの違いは?
-
別のプロセスの関数を呼び出す...
-
特定ユーザーのプロセス情報を...
-
explorer.exeが異様にメモリを食う
-
非表示になったエクセルは?
-
他のアプリケーションをクリッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バックグラウンドのプロセスの...
-
プロセスIDの取得方法について
-
ADOでアクセスのレコードに...
-
C#でのbatファイル実行結果取得
-
タスクマネージャーのプロセス...
-
VB6.0 SHELLで起動...
-
プロセスのアタッチ・デタッチ...
-
非表示になったエクセルは?
-
怪しいプロセス教えてください。
-
sleep関数の精度について
-
【C#】別プロセスがロックか...
-
Process.Startの戻り値を後で取得
-
IISがフリーズ
-
プロセスIDからウィンドウハ...
-
Linuxでのスレッド間メッセージ...
-
Windowsでのfork方法
-
SendMessageが失敗するときがある
-
警告『 別のプロセスで使用され...
-
WSH.Runで待機できません
-
VB.NETで起動したExcelの閉じ方...
おすすめ情報