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ランキング
-
アクティブセルから、A列最終行...
-
画面を強制的に再描画させる方法
-
どなたかこのプログラミングを...
-
乱数の桁数指定、または範囲指定。
-
アセンブラによるウェイト(WAIT...
-
VBA for i=1 to lastrow
-
VBAでの一時停止と再開の方法
-
alarmの使用について
-
For文を使った九九表の作成
-
「偶数・奇数の和」のフローチ...
-
UWSCの終了の仕方
-
EXCEL VBA(初心者)印刷ルー...
-
テキストボックスの名前に変数...
-
C言語 4) int 型配列 month を...
-
ループフリー
-
VBA Dir関数でファイルをループ...
-
変数の扱える範囲
-
vb.netからエクセル関数書き込み
-
一巡伝達関数と開ループ伝達関数
-
while(*s++=*t++)の判定は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
ループ7回目の悪役令嬢は、元敵...
-
UWSCの終了の仕方
-
Escキーを押すと、中断する時と...
-
エクセルの当番表を作っていま...
-
GIFアニメをループさせたくない
-
VBAで3秒だけ時間を止めたい
-
どなたかこのプログラミングを...
-
VBA for i=1 to lastrow
-
DOSコマンドのループ内のTIMEコ...
-
ListBox 複数選択 で オートフ...
-
vbscriptでIE自動入力(途中で...
-
vb.netからエクセル関数書き込み
-
DoEventsが必要な理由について
-
Java 南京錠
-
アクティブセルから、A列最終行...
-
テキストボックスの名前に変数...
-
範囲指定したセルを1つずつ飛...
-
VBA Dir関数でファイルをループ...
おすすめ情報