
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を見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
プログラマー達は何故、プログ...
-
C言語 関数、変数の宣言について
-
c言語
-
プログラミングc++を全く分か...
-
C言語について(初心者)
-
C# で 数式文字列処理を処理す...
-
visual studio 2022でのC#プロ...
-
DNCL(共テ用プログラミング言語...
-
プログラマーです。このDB設計...
-
ペーパーマリオみたいにドット...
-
C言語の関数のextern宣言
-
PIC12F1822でLED調光器を作りたい
-
最初に聞かれたこと
-
あってる
-
DNCL(共テ用プログラミング言語...
-
C言語のことです。写真(見にく...
-
Cのプログラムからアクセスでき...
-
プログラミング言語でアプリや...
-
c++の勉強方法を教えてくださ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
VBAでの一時停止と再開の方法
-
Escキーを押すと、中断する時と...
-
CSVファイルの特定の行だけを読...
-
VBAで3秒だけ時間を止めたい
-
範囲指定したセルを1つずつ飛...
-
UWSCに制限時間を付けたいです
-
乱数の桁数指定、または範囲指定。
-
「偶数・奇数の和」のフローチ...
-
DOSコマンドのループ内のTIMEコ...
-
DoEventsが必要な理由について
-
vb.netです。2次元配列の要素を...
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
EXCEL VBA ユーザーフォームの...
-
流れ図(フローチャート)が分か...
-
ループフリー
-
null 参照の例外が実行時に発生...
-
For文を使った九九表の作成
おすすめ情報