初始化C ++线程并稍后运行

时间:2015-07-09 15:20:29

标签: c++ multithreading c++11

我假设这个问题很简单。我想首先将一个线程定义为一个类的成员变量,然后在另一个函数中启动该线程。

例如:

标题文件:

#include<thread>
class Foo{
public:
   void threaded_method();
   void start_thread();
private:
   std::thread m_thread;      
};

Cpp文件:

void Foo::start_thread(){
    m_thread = std::thread(threaded_method);
}

虽然以上不起作用,但想法?

3 个答案:

答案 0 :(得分:6)

要将成员函数传递给线程,还必须传递要执行该函数的实例。

void Foo::start_thread(){
    m_thread = std::thread(&Foo::threaded_method, this);
}

答案 1 :(得分:0)

在这些页面中找到了一个很好的例子:

我忘了传递对成员函数的有效引用。

void Foo::start_thread(){
    m_thread = std::thread(&Foo::threaded_method, this);
}

应该有效。在发布问题后,我很乐意找到答案...

答案 2 :(得分:0)

您也可以简单地更改您的架构。例如,有一个列表,其中包含您要执行的功能。然后多线程浏览您想要运行的所有函数。