
有効でないウインドウハンドルを指定したSendMessageは安全?では無いでしょうか?
あるサブスレッドの処理進捗状況を、あるサブウインドウに貼り付けた
プログレスバー・コントロールに「現在~%」などと表示しています。
サブスレッド内からSendMessageでこのプログレスバーコントロールに
数値を送信しているのですが、
プログレスバーが貼りついているサブウインドウはユーザーが
閉じるボタンなどを押して任意に閉じたり開いたり出来るものに
なっています。
それでもし「閉じる」でサブウインドウが破棄されたとき
当然その子ウインドウであるプログレスバーコントロールのハンドルも有効な
ものでなくなっています。
このときスレッドで実行されるSendMessageは安全なものでは
なくなっているのでしょうか?
SendMessageを送る直前でif判定などでコントロールのハンドルが
有効かどうか調べるようにも考えたのですが
「調べて有効だと判断した直後」に破棄されて、それからSendMessageが実行される
という場合も可能性としてあるなら、直前での判定は意味が無いことになります。
(現在はウインドウを閉じる時、破棄するのでは無くSW_HIDEなどとして、ただ隠すだけに
しているのですがどうもスッキリした方法では無いなと思い。
本当にサブウインドウがいらない場合でも居座り続けるので。。)
SendMessage命令自体が、仮に送信先が存在しない場合でも安全に終えてくれるという
前提があれば簡単で良いのですが、このような場合どのようにするべきでしょうか。
No.1ベストアンサー
- 回答日時:
マイクロソフトのSendMessage仕様を記載しているホームページを見ても、「送信先が存在しない場合」の動作は記載されていないようです。
http://msdn.microsoft.com/ja-jp/library/cc411022 …
しかし、SendMessage関数はSendMessage関数を実行するとメッセージキューを介さずに直接相手のウィンドウプロシージャを実行し、相手のウィンドウプロシージャが終了するまで制御が戻ってこなかったハズです。
よって、相手がいなかった場合はダンマリになるか、関数の戻り値で異常が返るかのどちらかになると思います。
すんなり、HIDEにしておくのが無難かと思います。
回答ありがとうございます。
そうですか、やっぱり破棄はしない方が良さそうですね。
隠しにして、動作の保証を優先させたいと思います。
迅速なレスありがとうございました。またよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Chrome(クローム) 最近Win10にてブラウザが左にスッと隠れていく現象に悩まされてます 3 2023/07/22 23:11
- その他(プログラミング・Web制作) VSCodeの自動保存の2か所を無効にしているのに自動で保存されてしまう 1 2022/10/19 11:31
- その他(OS) Mac OSの操作について 2 2022/06/08 09:19
- Illustrator(イラストレーター) ウインドウの固定 1 2022/05/02 17:11
- ドライブ・ストレージ 外付けHDDの取り出し 3 2022/04/20 10:54
- その他(コンピューター・テクノロジー) PC利用中に勝手に起動する窓を消し去る方法を教えて下さい。 1 2023/05/08 16:48
- Windows 10 ファイルエクスプローラーでフォルダを閉じる操作について 2 2022/10/15 11:06
- その他(OS) MacのFinder操作について 2 2022/07/13 07:29
- Chrome(クローム) Google Chromeのブラウザ(PC)ウインドウの移動について 3 2022/07/19 15:14
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報