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も見ています
-
つい集めてしまうものはなんですか?
人間誰もは1つ「やたらこればかり集めてしまう」というものがあるもの。 あなたにとって、つい集めてしまうものはなんですか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
架空の映画のネタバレレビュー
映画のCMを見ていると、やたら感動している人が興奮で感想を話していますよね。 思わずストーリーが気になってしまう架空の感動レビューを教えて下さい!
-
WaitForSingleObjectの使い方について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UWSCの終了の仕方
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
-
Do whileでExitせず、ループの...
-
範囲指定したセルを1つずつ飛...
-
VBAでの一時停止と再開の方法
-
ループフリー
-
c++ ランダムウォーク
-
VBAで3秒だけ時間を止めたい
-
vbscriptでIE自動入力(途中で...
-
UWSCに制限時間を付けたいです
-
C#で別のフォームのprogress ba...
-
Javaでゲーム
-
DOSコマンドのループ内のTIMEコ...
-
アクティブセルから、A列最終行...
-
CSVファイルの特定の行だけを読...
-
ループ結線の調査方法
-
ListBox 複数選択 で オートフ...
-
DoEventsが必要な理由について
-
エクセル 数値の分解と展開
マンスリーランキングこのカテゴリの人気マンスリー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までループさ...
-
テキストボックスの名前に変数...
おすすめ情報