• ベストアンサー

【VC++2005(CLR)】マルチスレッドを使用したソースについて

いつも大変お世話になっています。 VC++初心者です。 現在、VC++2005 CLRプロジェクト(C++/CLI)で コーディングしています。 マルチスレッドを使おうと思い、他のページを参照して 以下のソースを書くと 以下のエラーメッセージが出ました。 どのように対処すればよいか、ご教授頂けませんでしょうか。 エラーメッセージ >delegate コンストラクタの引数が無効です。デリゲート ターゲットはメンバ関数のポインタである必要があります。 ****************** private: System::Void ProjectA_Shown(System::Object^ sender, System::EventArgs^ e) {  System::Threading::Thread^ t =   gcnew System::Threading::Thread(   gcnew System::Threading::ThreadStart(SendData()));  t->IsBackground = true;  t->Start();  t->Join(); } private: System::Void SendData(){  //データを送る処理 } ****************** ※表示のため先頭に全角スペースを入れています。 以上、よろしくお願いしたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「デリゲート ターゲットはメンバ関数のポインタである必要があります」 っていっているんだから, その通りに (メンバ関数のポインタを) 渡せばいいのでは? ああ, もちろんそれだけでいいかどうかは知りませんが.

yuki7091
質問者

お礼

ご回答、ありがとうございます。 そもそもデリゲートを理解していないのが問題なのですが、 具体的にソースサンプルを示していただくことは可能でしょうか。 (私の示したコードだけでは、厳しいかと思いますが、、、)

その他の回答 (3)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

MSDNライブラリにコード例があります。 http://msdn.microsoft.com/ja-jp/library/system.threading.threadstart.aspx

回答No.3
yuki7091
質問者

お礼

ご回答、ありがとうございます。 私のしたいことができました!

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

> gcnew System::Threading::ThreadStart(SendData()) とりあえずSendData()ではなくSendDataですね(括弧がいらない)

yuki7091
質問者

お礼

ご回答ありがとうございます。 以下のように書いてみました。 System::Threading::Thread^ t =  gcnew System::Threading::Thread(  gcnew System::Threading::ThreadStart(   &ProjectTOP::ProjectA::SendData)); すると、以下のエラーが出力されました。 >: error C3350: 'System::Threading::ThreadStart' : delegate コンストラクタには 2 つの引数が必要です つまり、delegateのコンストラクタを作らないといけない、 ということでしょうか。

関連するQ&A