• ベストアンサー

PostMessageの連続送信

毎々お世話になります。 開発環境は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を行った順に発行させることは可能でしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

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

BAIKAN
質問者

お礼

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

BAIKAN
質問者

補足

ご回答ありがとうございます。 このウインドウに対しては非同期処理を実現したいと思っています。(SendMessageですと送信側の処理が停止してしまう所で問題になります。) 再度の質問で申し訳ないのですが、ウインドウに対してPostMessageを連続で行った場合、メッセージキューはファーストイン・ファーストアウトで処理するものなのでしょうか? またウインドウ側の制御で抑止は可能なのでしょうか? よろしくお願いいたします。

その他の回答 (2)

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.3

はじめまして PostMessage関数はキューに登録してすぐ制御を返します。 連続して送ると 逆転されて発行することは大いにありえます キューってのはシステムが保持しますからねぇ 同じ使うのならすぐに制御を返してくれる SendNotifyMessage関数や SendMessageCallback関数なんかはどうですか? これはキューに登録するのではなく、直接指定した ウィンドウハンドルのプロシージャを呼び出し、制御を返す…と いう関数ですから、少なくとも逆転するとは思えないんですが。 詳しくはMSDNに載っているはずですから、モノは試しでやってみる価値はあると思います。 うまくいかなかったらごめんなさい。

BAIKAN
質問者

お礼

ありがとうございます、できれば同期型ではなく非同期型で制御したかったので・・・ この方法も検討してみます。

  • A__
  • ベストアンサー率47% (22/46)
回答No.2

PostMessageを受ける下位のアプリでPostMessageの処理順を指定するなら ifとかforとかを使えば、ソースは複雑になるけどできると思います。

BAIKAN
質問者

お礼

ありがとうございます、クライアント側でなんとかするしかないようですね・・・

関連するQ&A