我已有一个带有函数的类
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()函数。
但是,有没有一种方法可以使线程以这种方式运行?
答案 0 :(得分:2)
正确的语法是:
std::thread thread1(&Foo::startSimulation, &myFoo, "system cmd");
或者,您可以执行以下操作:
std::thread thread1([&myFoo]() { myFoo.startSimulation("system cmd"); });
请注意,在两种情况下,指针或引用都占用myFoo
,因此在线程终止之前不得破坏对象myFoo
。