这是一个很简单的开启一个线程, 用于演示一个线程和生命周期之间的错误,但是还没有把这个错误暴露出来, 就遇见了一个编译问题. 线程中执行指定逻辑的代码
线程的执行方法, 声明写在了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在初始化的时候, 需要绑定该方法之外, 还需要将其所操作的或者涉及的对象作为参数传入!
领取专属 10元无门槛券
私享最新 技术干货