アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも大変お世話になっています。
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(){
 //データを送る処理
}
******************
※表示のため先頭に全角スペースを入れています。

以上、よろしくお願いしたします。

A 回答 (4件)

「デリゲート ターゲットはメンバ関数のポインタである必要があります」


っていっているんだから, その通りに (メンバ関数のポインタを) 渡せばいいのでは? ああ, もちろんそれだけでいいかどうかは知りませんが.
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

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

お礼日時:2009/09/03 13:51

MSDNライブラリにコード例があります。


http://msdn.microsoft.com/ja-jp/library/system.t …
    • good
    • 1
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

私のしたいことができました!

お礼日時:2009/09/03 16:17

> gcnew System::Threading::ThreadStart(SendData())



とりあえずSendData()ではなくSendDataですね(括弧がいらない)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

以下のように書いてみました。
System::Threading::Thread^ t =
 gcnew System::Threading::Thread(
 gcnew System::Threading::ThreadStart(
  &ProjectTOP::ProjectA::SendData));

すると、以下のエラーが出力されました。
>: error C3350: 'System::Threading::ThreadStart' : delegate コンストラクタには 2 つの引数が必要です

つまり、delegateのコンストラクタを作らないといけない、
ということでしょうか。

お礼日時:2009/09/03 14:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!