
No.1ベストアンサー
- 回答日時:
★アドバイス
>CPU使用率が100%になったりしないのはどうしてですか。
100% にならないのはメッセージがキューという場所にメッセージが溜まるまで
一時停止(スリープ)をしている状態にあるからです。
例えば次のようなループを組んでみて下さい。
while ( 1 ){
/* 何かの処理 */
Sleep( 1 );
}
これを GUI のどこかに記述しても CPU 使用率は 100% にはなりません。
理由は Sleep() 関数で 1 ミリ秒だけループを一時停止しているからです。
・でもこの Sleep() 関数の記述がないと無限ループを組んでいますので
CPU 使用率が 100% になります。
WinMain のメッセージ・ループにある GetMessage() はメッセージが
キューに入るまで Sleep() 関数と同じく停止しています。つまり処理を
呼び出しもとの WinMain のメッセージ・ループに返しません。
このためCPU使用率は 100% にならないのです。
・同様な機能で PeekMessage() 関数があります。
こちらを GetMessage() の代わりにメッセージ・ループに記述すると
キューにメッセージがなくても呼び出し元に制御を返しますので
CPU使用率が 100% になってしまいます。
>入力が大してないときに、無駄にメッセージループをまわらせるのが悪いような気がします。
無駄なときは OS がキューという場所にメッセージを格納しないため GetMessage() は
何かのメッセージがキューという場所に溜まるまで一時停止(スリープ)状態にあるから
無限ループしても CPU使用率が 100% にならないのです。
・以上。
参考URL:http://msdn.microsoft.com/library/ja/default.asp …
なるほどGetMessage()がちゃんとそういう仕様になっていたのですね。
大変よくわかりました。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CPU・メモリ・マザーボード 昨日SSDを増設したら、PCが点かなくなりました。 ※BIOS画面にも行けません。 OSの入ったスト 6 2022/08/15 10:53
- CPU・メモリ・マザーボード パソコンについて パソコンcpu Inteli54460 HDDからSSDに交換してから起動直後、ア 7 2023/08/23 10:57
- ノートパソコン パソコンが重い。 職場で使用しているパソコンが夏休み明けあたりから急に重くなりました。 (特定のソフ 10 2022/09/06 17:30
- Java Java 南京錠 2 2023/02/04 11:46
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- ビデオカード・サウンドカード Media EncoderやStreamlabsDesktopのハードウェアエンコードについて 2 2023/03/25 12:16
- ノートパソコン celeronはまだゴミですか? 8 2022/11/19 13:41
- ビデオカード・サウンドカード メイン機とは別に、初自作としてpcを組みました。 pcスペック cpu ryzen5 5500 グラ 1 2023/05/15 12:22
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- プリンタ・スキャナー 「用紙が違う」メッセージが頻発 4 2022/08/22 08:30
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVファイルの特定の行だけを読...
-
Escキーを押すと、中断する時と...
-
DoEventsが必要な理由について
-
VBAでスロットを作る
-
CASLIIの問題で困っています
-
テキストボックスの名前に変数...
-
VBA横データを縦にしたいです
-
乱数の桁数指定、または範囲指定。
-
画面を強制的に再描画させる方法
-
範囲指定したセルを1つずつ飛...
-
Null判定がきかない
-
UWSCの終了の仕方
-
流れ図(フローチャート)が分か...
-
【VBA】全て空白のセルの列の非...
-
WinAPI「MsgWaitForMultipleObj...
-
vbscriptでIE自動入力(途中で...
-
pythonでファイルのコメント行...
-
CreateJS(TweenJS)での連続した...
-
ループ結線の調査方法
-
ループの終了条件
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
流れ図(フローチャート)が分か...
-
CSVファイルの特定の行だけを読...
-
範囲指定したセルを1つずつ飛...
-
VBAでの一時停止と再開の方法
-
乱数の桁数指定、または範囲指定。
-
VBA for i=1 to lastrow
-
VBAで3秒だけ時間を止めたい
-
vb.netです。2次元配列の要素を...
-
エクセルの当番表を作っていま...
-
vb.netからエクセル関数書き込み
-
DOSコマンドのループ内のTIMEコ...
-
「偶数・奇数の和」のフローチ...
-
GIFアニメをループさせたくない
-
Do whileでExitせず、ループの...
-
VB2010でCSVファイルの読み込み
-
【VBA】全て空白のセルの列の非...
-
アクティブセルから、A列最終行...
おすすめ情報