アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

理由:whileでずっと、ある処理を続けていたいのですが、CPUが100%にいってしまい。他のアプリが重いです。かといって、ミリ秒単位ででウエイトをかけても、処理の方に問題がでてしまいます。

A 回答 (6件)

μ秒オーダーで処理を OS に戻すやり方は


分かりませんが、
永久ループしている中で何回かに1回 Sleep(1)
するのも手ですよ。
    • good
    • 0

Perntium以降のCPUに限りますが・・・


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

QueryPerformanceCounter()
http://www.microsoft.com/japan/developer/library …

QueryPerfonmanceFrequency()
http://www.microsoft.com/japan/developer/library …
    • good
    • 0

 もし、正確な間隔が必要ないなら



 sleep(0);

 を試してみてはいかがでしょう。
 CPU使用率は100%近くになりますが、他のアプリはそれほど重く
ないと思います。
    • good
    • 0

基本的にWindowsのAPIの類ではマイクロ秒単位で


Sleepさせることはできなかったはず・・・

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

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

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

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

ダメなときは補足してください。
ではでは☆
    • good
    • 0

これは、μ秒でやってもCPU負荷は100%になりますよ。


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

ある処理を続けたいのならば、その処理をスレッド処理をするか、
その処理内部でメッセージ処理をするようにしましょう。
    • good
    • 0
この回答へのお礼

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

またよろしくお願いします

お礼日時:2001/01/26 12:17

μ秒単位ウェイトは無理です。


 ミリ秒単位が限界です。1/16秒が限界で、それ以下にしても、期待したスペックは出ません。

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

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

またよろしくお願いします

お礼日時:2001/01/26 12:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!