0

重複の可能性:
メンバー関数でスレッドを開始します

以下に示すように、c ++ 0xでクラスメソッドを使用してスレッドコンストラクターを定義しているときに、get関数を解決できません。私は何が間違っているのですか?

たとえば、私が持っている場合

#include <thread>
 using namespace std;
class A
{
 public:
    void doSomething();
    A();
}

次に、クラスAのコンストラクターで、doSomethingを使用してスレッドを開始します。以下のように書くと、doSomethingが解決されないというエラーが表示されます。私もこれ->何かをします。

 A::A()
 {
     thread t(doSomething);
  }
4

1 に答える 1

4

これを試して:

class A
{
 public:
   void doSomething();

   A()
   {
      thread t(&A::doSomething, this);
    }
};

また

class A
{
 public:
   static void doSomething();

   A()
   {
      thread t(&A::doSomething);
    }
};

注:スレッドをどこかで結合する必要があります。次に例を示します。

class A
{
public:
   void doSomething()
   {
      std::cout << "output from doSomething" << std::endl;
   }

   A(): t(&A::doSomething, this)
   {
   }
   ~A()
   {
     if(t.joinable())
     {
        t.join();
     }
   }

private:
  std::thread t;  
};

int main() 
{
    A a;        
    return 0;
}
于 2013-01-30T04:42:08.933 に答える