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 …
この回答へのお礼
お礼日時:2007/12/13 09:42
なるほどGetMessage()がちゃんとそういう仕様になっていたのですね。
大変よくわかりました。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UWSCの終了の仕方
-
GIFアニメをループさせたくない
-
while(*s++=*t++)の判定は?
-
メッセージループを調べすぎてC...
-
VBA for文が止まらない
-
Escキーを押すと、中断する時と...
-
forループは何故、forなのですか?
-
ループフリー
-
エラー処理 VBA その2
-
WHILE (CHKIMG(”A.bmp”)=FALSE)...
-
VBAで3秒だけ時間を止めたい
-
C言語でファクト関数を使わずに...
-
文字列を変数名として扱う方法
-
MATLABの関数で配列の要素を返...
-
perl 文字列検索後に指定フィー...
-
perlで2次元配列をサブルーチ...
-
DataGridViewに配列の値を表示...
-
VBのReturnの使い方
-
まったく同じファイルのハッシ...
-
エクセルVBAでTransposeの不思議
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UWSCの終了の仕方
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
-
DOSコマンドのループ内のTIMEコ...
-
VBAでの一時停止と再開の方法
-
VBAで3秒だけ時間を止めたい
-
範囲指定したセルを1つずつ飛...
-
CSVファイルの特定の行だけを読...
-
vb.netからエクセル関数書き込み
-
ループフリー
-
GIFアニメをループさせたくない
-
VBA for i=1 to lastrow
-
DoEventsが必要な理由について
-
乱数の桁数指定、または範囲指定。
-
多重ループの抜けだし方
-
アクティブセルから、A列最終行...
-
Do whileでExitせず、ループの...
-
ボタンが押された時にループか...
-
データベースをEOFまでループさ...
-
テキストボックスの名前に変数...
おすすめ情報