• 締切済み

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

VCでウエイトをミリ秒単位でかけられるんですが、μ秒でのやり方わかりません。 Sleep(); や タイマーでウエイトをミリ秒単位でかけられます。 どうしても、μ秒でウエイトをかけて、CPUを軽くしたいのです。 μ秒単位のウエイトのかけ方を教えてください。 理由:whileでずっと、ある処理を続けていたいのですが、CPUが100%にいってしまい。他のアプリが重いです。かといって、ミリ秒単位ででウエイトをかけても、処理の方に問題がでてしまいます。

みんなの回答

  • haru-p
  • ベストアンサー率28% (34/119)
回答No.6

μ秒オーダーで処理を OS に戻すやり方は 分かりませんが、 永久ループしている中で何回かに1回 Sleep(1) するのも手ですよ。

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.5

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

noname#18951
noname#18951
回答No.4

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

noname#9414
noname#9414
回答No.3

基本的にWindowsのAPIの類ではマイクロ秒単位で Sleepさせることはできなかったはず・・・ どうしてもというのであれば、C言語でサポート していたと思うので、そちらを探してください。 それと、while文でずっと処理を回し続ければ、 当たり前ですが、やたらとCPUの処理を占有すると 思います。どうせGUIを持つのでしょうから、 タイマーをはってはどうでしょうか?CUIのものの 場合は、見せないWindowを作れば、同じような 動作が可能になるはずです。 タイマーが切れたら処理をして、一度終わったら また数ミリ秒待たせる・・・ これではダメですか? どのような処理をさせたいのか分かりませんが、 ある程度のものならば、これで対処できると思います。 ダメなときは補足してください。 ではでは☆

  • senjyu
  • ベストアンサー率25% (7/27)
回答No.2

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

natukin_y
質問者

お礼

ご返答ありがとうございました(^0^) またよろしくお願いします

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.1

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

natukin_y
質問者

お礼

ご返答ありがとうございました(^0^) またよろしくお願いします

関連するQ&A

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

    Sleep(); や タイマーでウエイトをミリ秒単位でかけられます。 どうしても、μ秒でウエイトをかけて、CPUを軽くしたいのです。 μ秒単位のウエイトのかけ方を教えてください。 理由:whileでずっと、ある処理を続けていたいのですが、CPUが100%にいってしまい。他のアプリが重いです。かといって、ミリ秒単位ででウエイトをかけても、処理の方に問題がでてしまいます。

  • Perlで単純にミリ秒を求めることは可能でしょうか?

    Perlでミリ秒単位で計測したいのですが、Benchmark関数は $sa = timestr(timediff($b,$a)); とした結果が0 wallclock secs ( 0.41 usr + 0.05 sys = 0.45 CPUと表示されて、これが何を意味するのかわかりません。 単純にミリ秒を求めることは可能でしょうか?

    • ベストアンサー
    • Perl
  • 1秒は何ミリ秒とか、単位変換の問題が苦手です。

    今ITパスポートなどの情報処理技術者試験などの勉強をしているのですが、 1秒は何ミリ秒とか、3,600,000ミリ秒は何時間とかの単位変換の問題が苦手です。 また、4,096バイトは何kバイトとかの単位変換の問題とかも苦手です。 どのようにしたら、早く正確に解くことできるようになるでしょうか? 答え間違っていたり、答えが正解してても時間がかかってしまったりします。 計算方法や早く正確に解く方法など、教えていただけないでしょうか? よろしくお願いします。

  • VB6で正確なミリ秒を計測したいのですが

    VisualBasic6で処理の時間を計算したく、正確な(ミリ秒単位?)計測ができる関数を探しています。 長さは最長10日まで対応しているものはありますか? できれば、1/1000秒以下が計れるものです。

  • タイマー関数について

    こんばんは。 この掲示板には大変お世話になっています。ありがとうございます。 [質問内容] およそ1ミリ秒単位で、待機することができる関数はあるのでしょうか? 私は、C言語を使用しているのですが、タイマー関数としてはSleep関数しか知りません。しかし、最近になってSleep関数は10ミリ秒待機することが限界ということをこの掲示板で知りました。 Windowsプログラミングに用意してある関数で1ミリ秒待機できる関数はありますでしょうか? 私は今、対処方法としてダミー処理をほどこすことでだいたい1ミリ秒のタイマーを作っています。 C言語もまだまだ初心者ですがよろしくお願いします。

  • カウントアップを1秒毎に読み上げる音声タイマー

    カウントアップを1秒毎に読み上げてくれる音声タイマーを探しています。 具体的には、スタートボタンを押すと、 1秒、2秒、3秒 ・・・59秒、60秒、61秒・・・100秒・・・と 秒単位で読み上げてくれるタイマーはないでしょうか。 Microsoft Storeに「音声カウントタイマー」というWindows用のアプリがありましたが、このCountUpモードで読み上げる感じのものでいいのですが、分秒単位ではなく秒単位のみで読み上げてほしいです。 (〇) ・・・59秒、60秒・・・100秒・・・ (✖) ・・・59秒、1分・・・ 1分40秒・・・ 希望は、Windows用のフリーのソフトウェアですが、 なければ、iPhone用のフリーのアプリでもいいです。 ソフトウェア(アプリ)でなくても、ストップウォッチのように 製品(品物)の形のものでもいいです。 よろしくお願いします。

  • VC++6 と VC++2008 で作成したモジュールについて

    VC++6 で作成したモジュールA VC++2008 で作成したモジュールB がそれぞれあるとします。  これを、CPU クアッドコアで動作させたときに モジュールBは、複数CPU対応のアプリなので 処理速度が モジュールAより、2倍~4倍も処理速度が改善することはあるのでしょうか?

  • システムの時刻を利用しながら800ミリ秒毎のイベント発生

    現在For~Next文とSleep(700)を使用し、 イベントの処理時間を100ミリ秒と換算し、 2台のPCで同じコードを適用させ、 約800ミリ秒ごとにイベントを発生させております。 しかし、処理コード中にIf文やFor文も多数使用しているため、 取得条件の違いや、システムの負荷(?)、PCの性能(?)より遅延が発生していたり、 2台のPC間で一時間当たりの取得情報の量に違いがあることがわかりました。 2台のPCはNTPによる時刻同期により時刻のズレはないものとします。 はたして、システムから時刻を取得しつつ、 正確な800ミリ秒ごとのイベントを発生させる方法はあるのでしょうか。 面倒くさい質問で申し訳ありませんが、どうかよろしくお願いいたします。 現在のコードを以下に記します。 Sub ●約800ミリ秒ごとイベント発生プログラム●() Dim n As Long 'ループ用カウンタ Dim data As String For n = 1 To 26500 'ここから記録機能 Cells(n, "A") = Time Sleep (700) Calculate DoEvents '本当はここにイロイロなコードが入ります。 'ここに入るコードはスグに終わるときもあれば '80ミリ秒くらいかかるときもあります。 Next End Sub

  • 2点間の距離をミリ秒単位で求めたい

    緯度 X1:128365901 軽度 Y1:503036674 緯度 X2:128374588 経度 Y2:503044735 このようなミリ秒単位で表された2点間の距離を求めたいと思っています。距離の単位はメートルです。 参考になるサイトや公式などご存知の方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 秒単位のタイマーはありますか?

    パソコンのスイッチをいれた2秒後に他の器具のスイッチをいれたいのです。 そんな目的が可能な秒単位のタイマーをご存じでしたら教えてください。