最新閲覧日:

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

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

はじめまして



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

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

詳しくはMSDNに載っているはずですから、モノは試しでやってみる価値はあると思います。
うまくいかなかったらごめんなさい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/02 10:18

PostMessageを受ける下位のアプリでPostMessageの処理順を指定するなら


ifとかforとかを使えば、ソースは複雑になるけどできると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/02 10:17

PostMessageはメッセージを送信するだけで、メッセージの実行順序は受信側に任されています。

メッセージの送信後、送信側は次の処理(この場合、次のメッセージの送信)へと進みます。
したがって、このような逆転現象が発生する可能性があります。

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

この回答への補足

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

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

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

よろしくお願いいたします。

補足日時:2002/03/06 10:07
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/04/02 10:16

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報