如何使线程运行现有的class´函数? C ++

时间:2018-06-22 19:15:47

标签: c++ multithreading

我已有一个带有函数的类

void Foo::startSimulation(std::string system_cmd)
{
        //Calling a simulation script from system
        //After simulation, there is nothing to do. 
        //Thread self-terminates.
}

我的目标是创建一个运行Foo函数的线程。 我已经尝试过std::thread thread1(myFoo.startSimulation(message);,但是返回

: error: no matching constructor for initialization of 'std::thread'
candidate constructor not viable: cannot convert argument of incomplete type 'void' to 'const std::__1::thread'

所以我的函数返回void,线程无法运行。如何使线程存在,然后运行类函数在该线程中执行的过程。

以任何可能的方式制作线程。

std::thread thread1; // Creating the thread
thread1.start(myFoo.startSimulation("system cmd");
thread1.detach();

我知道以上三行代码在c ++中都不起作用。 std :: thread没有.start()函数。

但是,有没有一种方法可以使线程以这种方式运行?

1 个答案:

答案 0 :(得分:2)

正确的语法是:

std::thread thread1(&Foo::startSimulation, &myFoo, "system cmd");

或者,您可以执行以下操作:

std::thread thread1([&myFoo]() { myFoo.startSimulation("system cmd"); });

请注意,在两种情况下,指针或引用都占用myFoo,因此在线程终止之前不得破坏对象myFoo