- ベストアンサー
【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(){ //データを送る処理 } ****************** ※表示のため先頭に全角スペースを入れています。 以上、よろしくお願いしたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
「デリゲート ターゲットはメンバ関数のポインタである必要があります」 っていっているんだから, その通りに (メンバ関数のポインタを) 渡せばいいのでは? ああ, もちろんそれだけでいいかどうかは知りませんが.
その他の回答 (3)
- D-Matsu
- ベストアンサー率45% (1080/2394)
MSDNライブラリにコード例があります。 http://msdn.microsoft.com/ja-jp/library/system.threading.threadstart.aspx
- bluecampus
- ベストアンサー率66% (138/209)
お礼
ご回答、ありがとうございます。 私のしたいことができました!
- D-Matsu
- ベストアンサー率45% (1080/2394)
> gcnew System::Threading::ThreadStart(SendData()) とりあえずSendData()ではなくSendDataですね(括弧がいらない)
お礼
ご回答ありがとうございます。 以下のように書いてみました。 System::Threading::Thread^ t = gcnew System::Threading::Thread( gcnew System::Threading::ThreadStart( &ProjectTOP::ProjectA::SendData)); すると、以下のエラーが出力されました。 >: error C3350: 'System::Threading::ThreadStart' : delegate コンストラクタには 2 つの引数が必要です つまり、delegateのコンストラクタを作らないといけない、 ということでしょうか。
お礼
ご回答、ありがとうございます。 そもそもデリゲートを理解していないのが問題なのですが、 具体的にソースサンプルを示していただくことは可能でしょうか。 (私の示したコードだけでは、厳しいかと思いますが、、、)