※ ChatGPTを利用し、要約された質問です(原文:VC++でのスレッド間アクセス)
VC++でスレッド間アクセスエラーの対処方法とは?
このQ&Aのポイント
WindowsXP、VC++ 2005 ExpressEditionを使用して2台のパソコンをケーブルで繋いでチャットシステムを作ろうとしていますが、スレッド間の操作エラーが発生しています。
ハイパーターミナルを使ってデータの送受信は成功しており、問題はコントロールへのアクセスです。
デリゲートを使用する方法を検討していますが、具体的なVC++の書き方が分からず困っています。ご教授いただけると幸いです。
WindowsXP、VC++ 2005 ExpressEditionを使用しています。
2台のパソコンをケーブルで繋いでチャットシステムを作ろうとしているのですが、
「有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール '(コントロール名)' がアクセスされました。」
というエラーが出てしまいます。
ハイパーターミナルを使ってデータの送受信を確認した所、データの送信、受信共に出来ています。
問題はコントロールにアクセスできないところだと分かってはいるのですが、具体的にどのような書き方をしてデータを渡せばいいのか分かりません。
デリゲートではないかと見当をつけて、C#なら見つけたものの、それをどうVC++の書き方にすればいいか分からないので困っています。
また、デリゲートを使えばいいのかさえ手探り状態なので、どなたかご教授ください。
お礼
ありがとうございます。 C++のソースを元に改造を加えてみた所、目的のコントロールに表示できるようになりました。 しかし動いたものの、疑問なところがあります。 void DelegateMethod( TextBox^ myControl, String^ myCaption ) { myControl->Name = "Print_txt"; Print_txt->Text = myCaption; } この部分の表記で、新しく定義したmyControlというテキストボックスの名前を、表示したいコントロール名(元からフォームに配置してあったもの)に変えて、そこにmyCaptionの中身を表示するようにしたのですが、元からあった同名のテキストボックスとの関係はどうなっているのでしょう。 アクセスできるように名前を指定するのでしょうか? 参考サイトのソースは新しくコントロールを追加していたため、元からあるコントロールに表示したい場合にこの書き方でなぜ表示されるのか、納得できないので教えていただけると幸いです。