dポイントプレゼントキャンペーン実施中!

有効でないウインドウハンドルを指定したSendMessageは安全?では無いでしょうか?

 あるサブスレッドの処理進捗状況を、あるサブウインドウに貼り付けた
プログレスバー・コントロールに「現在~%」などと表示しています。
サブスレッド内からSendMessageでこのプログレスバーコントロールに
数値を送信しているのですが、
プログレスバーが貼りついているサブウインドウはユーザーが
閉じるボタンなどを押して任意に閉じたり開いたり出来るものに
なっています。
それでもし「閉じる」でサブウインドウが破棄されたとき
当然その子ウインドウであるプログレスバーコントロールのハンドルも有効な
ものでなくなっています。
このときスレッドで実行されるSendMessageは安全なものでは
なくなっているのでしょうか?
SendMessageを送る直前でif判定などでコントロールのハンドルが
有効かどうか調べるようにも考えたのですが
「調べて有効だと判断した直後」に破棄されて、それからSendMessageが実行される
という場合も可能性としてあるなら、直前での判定は意味が無いことになります。

(現在はウインドウを閉じる時、破棄するのでは無くSW_HIDEなどとして、ただ隠すだけに
しているのですがどうもスッキリした方法では無いなと思い。
本当にサブウインドウがいらない場合でも居座り続けるので。。)

SendMessage命令自体が、仮に送信先が存在しない場合でも安全に終えてくれるという
前提があれば簡単で良いのですが、このような場合どのようにするべきでしょうか。

A 回答 (1件)

マイクロソフトのSendMessage仕様を記載しているホームページを見ても、「送信先が存在しない場合」の動作は記載されていないようです。


http://msdn.microsoft.com/ja-jp/library/cc411022 …

しかし、SendMessage関数はSendMessage関数を実行するとメッセージキューを介さずに直接相手のウィンドウプロシージャを実行し、相手のウィンドウプロシージャが終了するまで制御が戻ってこなかったハズです。
よって、相手がいなかった場合はダンマリになるか、関数の戻り値で異常が返るかのどちらかになると思います。

すんなり、HIDEにしておくのが無難かと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
そうですか、やっぱり破棄はしない方が良さそうですね。
隠しにして、動作の保証を優先させたいと思います。
迅速なレスありがとうございました。またよろしくお願いします。

お礼日時:2010/05/23 07:26

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