0

スレッド呼び出しを介してクラスオブジェクトを他のクラスのメソッドに渡したいのですが、試してみましたが、エラーが発生しました。

struct sample{

  int status;

  std::vector <std::string> a_row;

  size_t column_count;

  std::vector <std::string> column;

};

class sess {

public:

    int a;

    sess(int);

    sess();

};

class Gen { 

     private: 

       static Gen* gen_obj;

     public:

       static bool Gen_InstanceFlag;

       static Gen* GetInstance();

       sample addition(sess);

};

/* ヘッダファイルの終わり */

/* cpp ファイルの先頭 */

include"Class_thread_mixing.h"

bool Gen::Gen_InstanceFlag=false;

Gen* Gen::GetInstance(){

if(!Gen::Gen_InstanceFlag){

    Gen::gen_obj = new Gen();

   Gen::Gen_InstanceFlag= true;

   return gen_obj;

  }
else {

    return gen_obj;

  }

}


sample addition(sess ses_obj){

 sample sam;

 sam.a_row.push_back("success");

 sam.column.push_back("result");

 sam.column_count=1;

 sam.status=ses_obj.a;

return sam;
}


int main(int argc, char* argv[])

{

  HANDLE myhandleA;

  Gen* gen=Gen::GetInstance();

  sess ses_obj(10);

  myhandleA=(HANDLE)_beginthreadex(0, 0, gen->addition(ses_obj),(void*)0, 0, 0);

  WaitForSingleObject(myhandleA, INFINITE);

  CloseHandle(myhandleA);

  getchar();

  return 0;

}

これは私のコードで、「エラー C2665: '_beginthreadex': none of the 2 overloads could convert the all argument types」のようなエラーが表示されます。

スレッド呼び出しで sess のオブジェクトを関数に渡すことができる人、およびスレッドから結果を取得する方法を教えてください。

あなたの答えをありがとう..

私のコード [(HANDLE)_beginthreadex(0, 0, gen->addition(ses_obj),(void*) 0, 0, 0) ]

スレッドで追加メソッドを呼び出す必要があり、これについては誰でも助けてくれます。

4

2 に答える 2

0

スレッドのエントリ ポイントをクラス メソッドにすることはできません。静的であるか、グローバル スコープである必要があります。

このような静的メソッドを定義する必要があります

static unsigned ThreadEntry(void* arg)
{
   sess *p = (sess*)arg;
   Gen::GetInstance()->addition(*p);
} 

次のようにスレッドを実行します。

sess ses_obj(10);
myhandleA=(HANDLE)_beginthreadex(0, 0, ThreadEntry,(void*)&ses_obj, 0, 0);
于 2013-10-09T12:13:33.857 に答える