【问题标题】:Passing member functions to std::thread [duplicate]将成员函数传递给 std::thread [重复]
【发布时间】:2012-06-15 20:32:42
【问题描述】:

可能重复:
Start thread with member function

我最近一直在玩 c++11 中的新 std::thread 库,但遇到了一个问题。当我尝试将类函数传递给新线程时,它给了我一个错误(我现在不知道确切的错误文本,因为我不在家) 我有这样的课

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

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

我做错了什么?

【问题讨论】:

  • 你试过将 FunctA/FunctB 设为静态吗?

标签: c++ multithreading c++11


【解决方案1】:
class A
{
    void FunctA();
    void FunctB();

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

指向成员函数的指针与指向函数的指针不同,调用它们的语法也不同,并且需要类的实例。您可以将指向实例的指针作为std::thread 构造函数的第二个参数传递。

【讨论】:

  • 如果他们有参数怎么办?你会如何通过它们?
  • @kdubs: ...作为构造函数调用的进一步参数。以后请务必阅读文档。
  • 此代码失败!即使您添加了public 关键字..
  • 我知道这很旧,但我一直在寻找解决方案。我现在已经在几个地方看到了这个答案,虽然编译它会导致段错误。这是为什么呢?
  • @IronAttorney 也许你需要加入或分离线程。
【解决方案2】:

我认为,问题在于您无法以类似于函数的方式获取指向成员函数的指针。 Here你会找到更多关于这个的信息。

此外,如果您提供编译器错误文本,回答会容易得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 2017-03-22
    • 2016-02-18
    • 2020-12-15
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多