
私は今まで、SendMessageを行うと、受信側の処理が終わるまで送信側は一切のメッセージ処理を受け付けない(処理が終了するまで待ち状態)と信じていました。
がしかし・・・実際には待っている間に自分のメッセージを処理することがあるようなのです。
■環境
VisualStudio2005 C/C++
■状況
「IntelliPointMouseのドライバ?であるipoint.exeを組み込んで」いる場合、SendMessage中にウィンドウの更新が発生します。
例)
SendMessage(hwnd, msg, 0, 0) <--- SendMessageから制御が返ってきて
いない状態で、メインスレットのOnPaint
が呼び出されることがある・・・
(コールスタックで確認・・・)
そこで・・・ 以下のような対応を行いました。
SendMessageTimeout(hwnd, msg, 0, 0, SMTO_BLOCK, 10000, ret);
SMTO_BLOCK属性を指定して、SendMessageを行ったところ、現在のところ
上記のような不可解な現象は発生していません。
現状では特定のドライバが起因している気がしますが、ソフトとしては
恒久的な対応を行う必要あると考えています。
今までSendMessage中になんらかのメッセージ処理が発生することは
考えていませんでしたが、そういったことを本来ありえるのでしょうか?
以上、簡単な説明ですが、何か情報ありましたら、ご教授よろしくお願いします。
No.1ベストアンサー
- 回答日時:
こちらに書いてありますが、
http://yokohama.cool.ne.jp/chokuto/urawaza/api/S …
引用「受信側スレッドがメッセージを処理するまで送信側スレッドの実行は停止されます。ただし、メッセージ処理を待つ間でも、送信側スレッドは自身に送られてきたキューイングされないメッセージは処理されます。これを防ぐには SendMessageTimeout 関数呼び出しで SMTO_BLOCK フラグを指定します。」
と言うことで、対処されたSMTO_BLOCKでWM_PAINTメッセージをブロックできていると思います。
ただし、恒久的にはWM_PAINTメッセージをブロックするのではなく、SendMessage中でも画面更新できるのが望ましいです。
ご教授ありがとうございます。
そうですか、やはりこういう事象を考慮してプログラミングすべき
なんですね。
今回はどうもご回答ありがとうございました。 m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
ACCESS側からEXCELの書式を設定...
-
メッセージボックスのボタン名変更
-
VBA、UserFormを前面に出力して...
-
beforecloseの中からの抜け出し方
-
Excel VBA で処理中断(DoEvents...
-
VBSで応答不要のメッセージボッ...
-
<input type="file">タグで「キ...
-
c#でボタンのアクションが終わ...
-
VB Loopを一時停止し再開あるい...
-
CreateCompatibleDCを初期化時...
-
ASP.NETでのメッセージ画面を出...
-
マウスのクリックを無視したい
-
【MFC】イベントの無効化について
-
エディットコントロールへの表示
-
ボタンが押された事を検知する...
-
Windowsがシャットダウンする前に
-
PostMessageの連続送信
-
VBA メッセージボックスを自動...
-
Loopとフリーズ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
VBA kernel32 の意味
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
VBSで応答不要のメッセージボッ...
-
VBA、UserFormを前面に出力して...
-
【C#】 あるイベントから別イ...
-
Excel VBA で処理中断(DoEvents...
-
PostMessageの連続送信
-
ボタンが押された事を検知する...
-
Application.ScreenUpdating=Fa...
-
エクセルVBAでクリップボード内...
-
VB Loopを一時停止し再開あるい...
-
起動後直に実行するコードはど...
-
DirectX環境下での方向キー同時...
-
Excel VBA 実行中に一瞬フリー...
-
OSシャットダウン時の常駐アプ...
-
マウスのクリックを無視したい
-
エクセルVBAで
-
メッセージボックスの表示につ...
おすすめ情報