
私は今まで、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で質問しましょう!
似たような質問が見つかりました
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- 大学・短大 大学のあまりにも対応が酷いスタッフについて、苦情というか、相談して、対処してくれる機関などはあります 7 2022/05/31 08:41
- その他(ブラウザ) このページは動作していません HTTP ERROR 401 2 2022/11/28 12:11
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- BTOパソコン ドスパラのサポート対応に少し不信感があります。 ドスパラのガレリアを購入してから3ヶ月でゲームプレイ 8 2023/03/23 22:00
- 教育・文化 高校生です。将来政治家になって犯罪率を0.0%代にしたいのですが、可能だと思いますか? ㅤ 大まかな 8 2022/08/27 18:51
- 国家公務員・地方公務員 公務員試験の作文対策です! 良ければ添削お願いします! ●大地震が起きた時、〇〇町職員として何をすべ 1 2022/10/01 12:32
- 政治 日本で梅毒が増え続けているのは自民党が性犯罪に甘いからですよね? 7 2022/11/04 11:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
VBA、UserFormを前面に出力して...
-
VBA メッセージボックスを自動...
-
MFCのメニューバーのイベント取得
-
VBSの処理中一旦処理を止めて再...
-
VB.NET開発(イベントプロシー...
-
エクセルVBAでクリップボード内...
-
「VBでExcel上PictureBoxダブル...
-
VBSで応答不要のメッセージボッ...
-
Application.ScreenUpdating=Fa...
-
C言語で計算機をつくりたい
-
Timerのカウントダウンのしかた...
-
スロットゲームのプログラミング
-
キーボード入力、マウス操作を...
-
VB6 コマンドボタン クリック...
-
[VC++] AfxBeginThreadで生成し...
-
VB Loopを一時停止し再開あるい...
-
サスペンド(休止やスタンバイ...
-
VCでウエイトをミリ秒でかけ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
VBA kernel32 の意味
-
ACCESS側からEXCELの書式を設定...
-
Application.ScreenUpdating=Fa...
-
Excel VBA で処理中断(DoEvents...
-
エクセルVBAでクリップボード内...
-
VBSで応答不要のメッセージボッ...
-
VBA、UserFormを前面に出力して...
-
【C#】 あるイベントから別イ...
-
【MFC】イベントの無効化について
-
「キャンセル」ボタン付きの処...
-
シャットダウン時のExcel強制終...
-
MFCのワーカースレッドとUIスレ...
-
Excel VBA 実行中に一瞬フリー...
-
Excel(VBA)シート上のコマンド...
-
VB.NETで数秒間msgboxの...
-
サスペンド(休止やスタンバイ...
-
ループを使わずに、特定時間に...
-
起動後直に実行するコードはど...
おすすめ情報