Подтвердить что ты не робот

Передача функций-членов в std:: thread

Возможный дубликат:
Начать поток с помощью функции-члена

Недавно я играл с новой библиотекой std:: thread в С++ 11, и я столкнулся с проблемой. Когда я пытаюсь передать функцию классов в новый поток, это дает мне ошибку (у меня нет точного текста ошибки прямо сейчас, поскольку у меня нет дома) У меня был класс вроде этого

class A
{
    void FunctA();
    void FunctB();

    void run()
    {
        std::thread t(FunctA);
        std::thread r(FunctB);
    }
}

Что я делаю неправильно?

4b9b3361

Ответ 1

class A
{
    void FunctA();
    void FunctB();

    void run()
    {
        std::thread t(&A::FunctA, this);
        std::thread r(&A::FunctB, this);
    }
};

Указатели на функции-члены отличаются от указателей на функции, а синтаксис их вызова различен и требует экземпляра класса. Вы можете просто передать указатель на экземпляр как второй аргумент конструктора std::thread.

Ответ 2

class A
{
  public:
    A( FunctA &fa ) : fa(fa) {}

    struct FunctA
    {
      virtual void operator()() = 0;
    }
    struct FunctB
    {
      void operator()()
      {
        // thread B
      }
    }
    FunctA &fa;
    FunctB fb;

    void run()
    {
        std::thread t(fa);
        std::thread r(fb);
    }
}

повысить документацию

Ответ 3

Я думаю, проблема в том, что вы не можете получить указатель на функцию-член таким образом, как функции. Здесь вы найдете дополнительную информацию об этом.

Кроме того, было бы гораздо легче ответить, если вы предоставили текст ошибки компилятора.