- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++でのスレッド間アクセス)
VC++でスレッド間アクセスエラーの対処方法とは?
このQ&Aのポイント
- WindowsXP、VC++ 2005 ExpressEditionを使用して2台のパソコンをケーブルで繋いでチャットシステムを作ろうとしていますが、スレッド間の操作エラーが発生しています。
- ハイパーターミナルを使ってデータの送受信は成功しており、問題はコントロールへのアクセスです。
- デリゲートを使用する方法を検討していますが、具体的なVC++の書き方が分からず困っています。ご教授いただけると幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
.NETでは、メインスレッド以外がフォームやコントロールのプロパティを変更することを禁止しています。 >デリゲートではないかと見当をつけて その見解であっているはずです。 参考サイトにC++でのソースがあります。
その他の回答 (1)
- dekopa-
- ベストアンサー率42% (161/378)
回答No.2
#1です。 いまいち「新しく定義したコントロール」「定義済みコントロール」をどう渡したのか、文面から読みづらいのですが。 貴方が何を理解していて、何を理解していないのか正直わかりません。以下、想像というかあてずっぽうで回答します。 ローカルとグローバルのスコープの違いだとか、引数はローカルだとか、その違いを理解されていますか? DelegateMethodの引数「myControl」「myCaption」はローカルの宣言なので、存在しない全然別の名前「ctrl」「cap」に変えても動作は変わりません。 #変わったら何か別の間違いをしている。 あと、myControlという名前がすでに別のところで使われていても、直近で宣言したローカル変数に同名の名前があればそちらが優先されます。 それで混乱しているのでは?
質問者
お礼
>あと、myControlという名前がすでに別のところで使われていても、直近で宣言したローカル変数に同名の名前があればそちらが優先されます。 聞きたかったことはこれです。 つたない文章に回答していただきありがとうございました。
お礼
ありがとうございます。 C++のソースを元に改造を加えてみた所、目的のコントロールに表示できるようになりました。 しかし動いたものの、疑問なところがあります。 void DelegateMethod( TextBox^ myControl, String^ myCaption ) { myControl->Name = "Print_txt"; Print_txt->Text = myCaption; } この部分の表記で、新しく定義したmyControlというテキストボックスの名前を、表示したいコントロール名(元からフォームに配置してあったもの)に変えて、そこにmyCaptionの中身を表示するようにしたのですが、元からあった同名のテキストボックスとの関係はどうなっているのでしょう。 アクセスできるように名前を指定するのでしょうか? 参考サイトのソースは新しくコントロールを追加していたため、元からあるコントロールに表示したい場合にこの書き方でなぜ表示されるのか、納得できないので教えていただけると幸いです。