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で質問しましょう!
似たような質問が見つかりました
- Windows 10 ウィンドウズ11でスリープの設定は? 1 2022/05/26 02:41
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- gooのスマホ ほっとくと+メッセージ(ショートメール)が使えなくなるってこと? 3 2022/07/13 07:49
- Windows 10 スリープ復帰時にパスワードの要求がされない 4 2022/10/14 12:52
- ヤフオク! Yahooオークションの落札代金の決済について 2 2023/07/03 20:31
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- その他(IT・Webサービス) slackで初回メッセージを送る時の文言 1 2022/03/31 10:39
- Evernote Evernoteの操作 1 2023/07/24 17:17
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでの一時停止と再開の方法
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
どなたかこのプログラミングを...
-
Javaでゲーム
-
イベントの発生を待つ
-
テキストボックスの名前に変数...
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
モンテカルロ法
-
VBAで3秒だけ時間を止めたい
-
エクセルの当番表を作っていま...
-
多重ループの抜けだし方
-
VBA Dir関数でファイルをループ...
-
StatementとResultSetのclose()...
-
vb.netからエクセル関数書き込み
-
Escキーを押すと、中断する時と...
-
Excel vba でコンボボックスの...
-
イテレータの存在意義
-
VBA横データを縦にしたいです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
-
VBA for i=1 to lastrow
-
「偶数・奇数の和」のフローチ...
-
アクティブセルから、A列最終行...
-
DoEventsが必要な理由について
-
vb.netからエクセル関数書き込み
-
GIFアニメをループさせたくない
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
流れ図(フローチャート)が分か...
-
乱数の桁数指定、または範囲指定。
-
テキストボックスの名前に変数...
-
CSVファイルの特定の行だけを読...
-
vb.netです。2次元配列の要素を...
おすすめ情報