将成员函数传递给std::thread

23

可能是重复问题:
如何使用成员函数启动线程

最近我在尝试使用c++11中的std::thread库,并遇到了一个问题。当我尝试将类的函数传递给新线程时,它会报错(因为我现在离家不在电脑旁边,所以无法提供具体的错误信息)。 我的类看起来像这样:

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

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

我做错了什么?


1
你尝试过将FunctA/FunctB设置为静态的吗? - AndersK
2个回答

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

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

成员函数指针与普通函数指针不同,其语法和调用方式也有所不同,需要传入类实例。你可以将实例的指针作为 std::thread 构造函数的第二个参数直接传递。


5
如果它们有参数,你该如何传递它们? - kdubs
1
@kdubs:...作为构造函数调用的进一步参数。请在未来阅读文档。 - Griwes
这段代码失败了!即使你添加了public关键字... - towi_parallelism
1
我知道这个问题很老了,但我一直在寻找解决方案。我现在已经在几个地方看到了这个答案,虽然它可以编译,但会导致段错误。为什么会这样? - Iron Attorney
@IronAttorney 也许你需要加入或分离线程。 - Steve M

0

我认为问题在于你无法像函数一样获取成员函数的指针。这里 你可以找到更多相关信息。

另外,如果你提供编译器错误文本,回答会更容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接