OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

PostMessageの連続送信

  • すぐに回答を!
  • 質問No.229664
  • 閲覧数1623
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 54% (29/53)

毎々お世話になります。
開発環境はNT4.0+SP6、VC++6.0です。

CWndのウインドウに対し上位のアプリからPostMessageを行いイベントを発行させようとしています。

1回ずつPostMessageを行うと問題ないのですが、
Call PostMessage(hwnd, WM_USER + &H1000, 1, 100)
Call PostMessage(hwnd, WM_USER + &H1001, 1, 102)
Call PostMessage(hwnd, WM_USER + &H1002, 1, 103)

のように連続してPostMessageを行うとイベントが逆転して発行されてしまいます。(103,102,100の順にイベントが発行されます。)

イベントをPostMessageを行った順に発行させることは可能でしょうか?

よろしくお願いいたします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル12

ベストアンサー率 48% (325/664)

PostMessageはメッセージを送信するだけで、メッセージの実行順序は受信側に任されています。メッセージの送信後、送信側は次の処理(この場合、次のメッセージの送信)へと進みます。
したがって、このような逆転現象が発生する可能性があります。

メッセージを送信した順番に実行させたいならば、SendMessageを使用します。
SendMessageならメッセージを送信し、受信側の処理終了まで送信側の処理は停止します。したがって、次のメッセージの送信は確実に前のメッセージの処理終了後となります。
補足コメント
BAIKAN

お礼率 54% (29/53)

ご回答ありがとうございます。

このウインドウに対しては非同期処理を実現したいと思っています。(SendMessageですと送信側の処理が停止してしまう所で問題になります。)

再度の質問で申し訳ないのですが、ウインドウに対してPostMessageを連続で行った場合、メッセージキューはファーストイン・ファーストアウトで処理するものなのでしょうか? またウインドウ側の制御で抑止は可能なのでしょうか?

よろしくお願いいたします。
投稿日時 - 2002-03-06 10:07:23
お礼コメント
BAIKAN

お礼率 54% (29/53)

ご回答ありがとうございました。
投稿日時 - 2002-04-02 10:16:36
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.2
レベル10

ベストアンサー率 47% (22/46)

PostMessageを受ける下位のアプリでPostMessageの処理順を指定するなら ifとかforとかを使えば、ソースは複雑になるけどできると思います。 ...続きを読む
PostMessageを受ける下位のアプリでPostMessageの処理順を指定するなら
ifとかforとかを使えば、ソースは複雑になるけどできると思います。
お礼コメント
BAIKAN

お礼率 54% (29/53)

ありがとうございます、クライアント側でなんとかするしかないようですね・・・
投稿日時 - 2002-04-02 10:17:29


  • 回答No.3
レベル13

ベストアンサー率 15% (296/1947)

はじめまして PostMessage関数はキューに登録してすぐ制御を返します。 連続して送ると 逆転されて発行することは大いにありえます キューってのはシステムが保持しますからねぇ 同じ使うのならすぐに制御を返してくれる SendNotifyMessage関数や SendMessageCallback関数なんかはどうですか? これはキューに登録するのではなく、直接指定した ウィン ...続きを読む
はじめまして

PostMessage関数はキューに登録してすぐ制御を返します。
連続して送ると
逆転されて発行することは大いにありえます
キューってのはシステムが保持しますからねぇ

同じ使うのならすぐに制御を返してくれる
SendNotifyMessage関数や
SendMessageCallback関数なんかはどうですか?
これはキューに登録するのではなく、直接指定した
ウィンドウハンドルのプロシージャを呼び出し、制御を返す…と
いう関数ですから、少なくとも逆転するとは思えないんですが。

詳しくはMSDNに載っているはずですから、モノは試しでやってみる価値はあると思います。
うまくいかなかったらごめんなさい。
お礼コメント
BAIKAN

お礼率 54% (29/53)

ありがとうございます、できれば同期型ではなく非同期型で制御したかったので・・・
この方法も検討してみます。
投稿日時 - 2002-04-02 10:18:54
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ