Передача функций-членов в std:: thread
Возможный дубликат:
Начать поток с помощью функции-члена
Недавно я играл с новой библиотекой std:: thread в С++ 11, и я столкнулся с проблемой. Когда я пытаюсь передать функцию классов в новый поток, это дает мне ошибку (у меня нет точного текста ошибки прямо сейчас, поскольку у меня нет дома)
У меня был класс вроде этого
class A
{
void FunctA();
void FunctB();
void run()
{
std::thread t(FunctA);
std::thread r(FunctB);
}
}
Что я делаю неправильно?
Ответы
Ответ 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
Я думаю, проблема в том, что вы не можете получить указатель на функцию-член таким образом, как функции. Здесь вы найдете дополнительную информацию об этом.
Кроме того, было бы гораздо легче ответить, если вы предоставили текст ошибки компилятора.