-PR-
締切済み

VCでウエイトをミリ秒でかけられるんですが、μ秒でのやり方わかりません

  • すぐに回答を!
  • 質問No.32812
  • 閲覧数985
  • ありがとう数10
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 28% (2/7)

VCでウエイトをミリ秒単位でかけられるんですが、μ秒でのやり方わかりません。

Sleep(); や タイマーでウエイトをミリ秒単位でかけられます。
どうしても、μ秒でウエイトをかけて、CPUを軽くしたいのです。
μ秒単位のウエイトのかけ方を教えてください。

理由:whileでずっと、ある処理を続けていたいのですが、CPUが100%にいってしまい。他のアプリが重いです。かといって、ミリ秒単位ででウエイトをかけても、処理の方に問題がでてしまいます。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全6件)

  • 回答No.2
レベル7

ベストアンサー率 25% (7/27)

これは、μ秒でやってもCPU負荷は100%になりますよ。 Windowsプログラムは、OSを含むプロセス間でメッセージ等の 通信をしていますので、あるプログラムがこのプロセス通信を遮断すると、 他のアプリの通信が途絶えます。よって、他のアプリが重くなるのです。 くわしくは、OSはそれぞれのプログラムが何をやってるかわかりませんから、 容赦なく全てのプログラムにメッセージを送ってきます。 プログ ...続きを読む
これは、μ秒でやってもCPU負荷は100%になりますよ。
Windowsプログラムは、OSを含むプロセス間でメッセージ等の
通信をしていますので、あるプログラムがこのプロセス通信を遮断すると、
他のアプリの通信が途絶えます。よって、他のアプリが重くなるのです。
くわしくは、OSはそれぞれのプログラムが何をやってるかわかりませんから、
容赦なく全てのプログラムにメッセージを送ってきます。
プログラムは、そのメッセージが必要なければ、必要ない旨をOSに
知らせなくてはなりません。whileループでこの処理を行っていない場合、
OSはタイムアウトまで待ちつづけることになり、他のプログラムに
メッセージを送れません。当然、本来そのメッセージが必要なプログラム側
からすれば、メッセージがこないわけですから動くことが出来ません。

ある処理を続けたいのならば、その処理をスレッド処理をするか、
その処理内部でメッセージ処理をするようにしましょう。
お礼コメント
natukin_y

お礼率 28% (2/7)

ご返答ありがとうございました(^0^)

またよろしくお願いします
投稿日時 - 2001-01-26 12:17:17
関連するQ&A


  • 回答No.1
レベル13

ベストアンサー率 33% (427/1283)

μ秒単位ウェイトは無理です。  ミリ秒単位が限界です。1/16秒が限界で、それ以下にしても、期待したスペックは出ません。  重い処理の場合には、スレッドにするのが一般的で、それならばスレッドの優先度等を設定すれば、CPUが100%にならずに使用出来ます(まぁ設計の問題があれば別ですが...ね) ...続きを読む
μ秒単位ウェイトは無理です。
 ミリ秒単位が限界です。1/16秒が限界で、それ以下にしても、期待したスペックは出ません。

 重い処理の場合には、スレッドにするのが一般的で、それならばスレッドの優先度等を設定すれば、CPUが100%にならずに使用出来ます(まぁ設計の問題があれば別ですが...ね)
お礼コメント
natukin_y

お礼率 28% (2/7)

ご返答ありがとうございました(^0^)

またよろしくお願いします
投稿日時 - 2001-01-26 12:17:43
  • 回答No.3

基本的にWindowsのAPIの類ではマイクロ秒単位で Sleepさせることはできなかったはず・・・ どうしてもというのであれば、C言語でサポート していたと思うので、そちらを探してください。 それと、while文でずっと処理を回し続ければ、 当たり前ですが、やたらとCPUの処理を占有すると 思います。どうせGUIを持つのでしょうから、 タイマーをはってはどうでしょうか?CUIのもの ...続きを読む
基本的にWindowsのAPIの類ではマイクロ秒単位で
Sleepさせることはできなかったはず・・・

どうしてもというのであれば、C言語でサポート
していたと思うので、そちらを探してください。

それと、while文でずっと処理を回し続ければ、
当たり前ですが、やたらとCPUの処理を占有すると
思います。どうせGUIを持つのでしょうから、
タイマーをはってはどうでしょうか?CUIのものの
場合は、見せないWindowを作れば、同じような
動作が可能になるはずです。

タイマーが切れたら処理をして、一度終わったら
また数ミリ秒待たせる・・・
これではダメですか?

どのような処理をさせたいのか分かりませんが、
ある程度のものならば、これで対処できると思います。

ダメなときは補足してください。
ではでは☆
  • 回答No.4

 もし、正確な間隔が必要ないなら  sleep(0);  を試してみてはいかがでしょう。  CPU使用率は100%近くになりますが、他のアプリはそれほど重く ないと思います。
 もし、正確な間隔が必要ないなら

 sleep(0);

 を試してみてはいかがでしょう。
 CPU使用率は100%近くになりますが、他のアプリはそれほど重く
ないと思います。
  • 回答No.5
レベル11

ベストアンサー率 58% (114/195)

Perntium以降のCPUに限りますが・・・ QueryPerformanceCounter() QueryPerformanceFurequency() にてCPUのクロックカウントを取得できます これを使えばマイクロ秒単位でも計測は出来ます・・・が 理由を見る限りではこの方法でどうこうするよりも構造を見直すか、マルチスレッド化したりするほうが上手くいくと思いますよ QueryPerf ...続きを読む
Perntium以降のCPUに限りますが・・・
QueryPerformanceCounter()
QueryPerformanceFurequency()
にてCPUのクロックカウントを取得できます
これを使えばマイクロ秒単位でも計測は出来ます・・・が
理由を見る限りではこの方法でどうこうするよりも構造を見直すか、マルチスレッド化したりするほうが上手くいくと思いますよ

QueryPerformanceCounter()
http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpuipf/_win32_queryperformancecounter.htm

QueryPerfonmanceFrequency()
http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpuipf/_win32_queryperformancefrequency.htm
  • 回答No.6
レベル10

ベストアンサー率 28% (34/119)

μ秒オーダーで処理を OS に戻すやり方は 分かりませんが、 永久ループしている中で何回かに1回 Sleep(1) するのも手ですよ。
μ秒オーダーで処理を OS に戻すやり方は
分かりませんが、
永久ループしている中で何回かに1回 Sleep(1)
するのも手ですよ。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ