

Windowsプログラミング初心者です。
MsgWaitForMultipleObjectsを使ってメッセージ待ちの処理をウェイトさせることでCPUの付加を抑えたいと考えて、以下のような処理を作りました。
4行目のPeekMessageで自分のウィンドウにユーザ定義のメッセージが届いたらループを抜け、届かなかった場合には8行目のMsgWaitForMultipleObjectsで次のメッセージが届くまでスリープしたいと思っています。
01 while(TRUE)
02 {
03 /* hWnd宛てのユーザ定義メッセージの有無を確認 */
04 if(PeekMessage(msg, hWnd, WM_USER, WM_USER + 10, PM_REMOVE)){
05 break; /* メッセージがあればwait処理終了 */
06 }
07
08 if(MsgWaitForMultipleObjects(0, NULL, TRUE, INFINITE, QS_POSTMESSAGE) == -1){
09 return ICCJZD_NG;
10 }
11 }
これを動かすと、メッセージが届いているはずなのにMsgWaitForMultipleObjectsのスリープが解除されず、固まっているウィンドウ上をクリックするとスリープが解除されてユーザ定義のメッセージを受け取ってbreakします。
スリープ時間をINFINITEに設定していますが、これは可能な限りループを抑止したいからです。
ユーザ定義のメッセージが届いたら即MsgWaitForMultipleObjectsのスリープを解除させるにはどうしたらよいのでしょうか?
No.1ベストアンサー
- 回答日時:
ヘルプには
>スレッドがメッセージキューをチェックする関数を呼び出した後、
>指定した種類の未読の入力がキューの中に存在するときにこの関数を呼び出すと制御が戻りません。
ということなんで、直前に破棄してるのがWM_USER~WM_USER + 10だけだからじゃないんですか?
というか、なんで普通にメッセージループみたいにGetMessage使わないの?
GetMessageよりもMsgWaitForMultipleObjectsのほうが拾うメッセージが少ないと判断したので使用しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
UWSCのスクリプトで行き詰って...
-
VBAでこの様なコード時のセルの...
-
流れ図(フローチャート)が分か...
-
VBAでの一時停止と再開の方法
-
UWSCに制限時間を付けたいです
-
VB2010でCSVファイルの読み込み
-
範囲指定したセルを1つずつ飛...
-
objective-cの多重ループbreak
-
エクセルの当番表を作っていま...
-
ExcelVBAで、index、match関数...
-
「偶数・奇数の和」のフローチ...
-
リストボックスに縦スクロール...
-
RFC822形式の日付を生成するサ...
-
一致する要素が格納されている...
-
ハッシュ値が一致したデータは...
-
VBのReturnの使い方
-
ハッシュ検索はなぜ速い
-
短いハッシュの作り方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
UWSCの終了の仕方
-
CSVファイルの特定の行だけを読...
-
範囲指定したセルを1つずつ飛...
-
UWSCに制限時間を付けたいです
-
Escキーを押すと、中断する時と...
-
乱数の桁数指定、または範囲指定。
-
VBA for i=1 to lastrow
-
流れ図(フローチャート)が分か...
-
DOSコマンドのループ内のTIMEコ...
-
pythonでファイルのコメント行...
-
素数表について。
-
VBAでの一時停止と再開の方法
-
「偶数・奇数の和」のフローチ...
-
DoEventsが必要な理由について
-
vb.netです。2次元配列の要素を...
-
Do whileでExitせず、ループの...
-
ループフリー
-
エクセルの当番表を作っていま...
-
VBAで3秒だけ時間を止めたい
おすすめ情報