C++ 线程初始化编译报错
这是一个很简单的开启一个线程, 用于演示一个线程和生命周期之间的错误,但是还没有把这个错误暴露出来, 就遇见了一个编译问题. 线程中执行指定逻辑的代码
线程的执行方法, 声明写在了ThreadRun.h 实现写在 ThreadRun.cpp中.
class ThreadRun {
public:
void func();
};
void ThreadRun::func() {
cout << "Thread: " << this_thread::get_id() << " start" << endl;
cout << "Thread: " << this_thread::get_id() << " end" << endl;
}
main方法调用: 此处出现编译异常,红字代表报错内容
int main() {
ThreadRun myClass;
//此处报错:
//"error: no matching constructor for initialization of 'thread'"
thread t1(myClass.func());
t1.join();
return 0;
}
解
函数构造方法传参错误, 在Main.cpp中, 将代码改为
int main() {
ThreadRun myClass;
// 代码改动处
// thread t1(myClass.func());
thread t1(&ThreadRun::func, &mgClass);
t1.join();
return 0;
}
总结:
Thread如果绑定的执行逻辑, 是一个类里面的成员函数, 那么thread在初始化的时候, 需要绑定该方法之外, 还需要将其所操作的或者涉及的对象作为参数传入!