🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### thread操作 ***** **join** 主线程等待子线程执行完再关闭 ``` std::thread mytobj(myPrint); mytobj.join(); std::cout << "主线程收尾,最终主线程安全正常推出!" << std::endl; ``` **detach** 主线程跟子线程没有太大关系,主线程可以不必等待子线程执行完再关闭 ``` std::thread mytobj(myPrint); mytobj.detach(); std::cout << "主线程收尾,最终主线程安全正常推出!" << std::endl; ``` **joinable** 返回TRUE 表示可以join或者detach,返回FALSE则表示不能join或detach ``` std::thread mytobj(myPrint); if (mytobj.joinable()) mytobj.join(); ``` ### **其他创建线程的方式** **1,类创建** ```c++ class MyClass { public: MyClass(); ~MyClass(); void operator() () { std::cout << "我的线程operator()开始执行了" << std::endl; //... std::cout << "我的线程operator()结束执行了" << std::endl; } private: }; int main() { MyClass mc; std::thread mytob2(mc); mytob2.join();//等待子线程结束 std::cout << "主线程收尾,最终主线程安全正常推出!" << std::endl; //当主线程销毁时这个mc对象不存在了,但是这个对象已经被复制到线程中去了 只要mc没有指针没有引用,就不会有问题 ``` **2.lamthread创建** ```c++ auto mylamthread = [] { std::cout << "我的线程mylamthread()开始执行了" << std::endl; std::cout << "我的线程operator()执行结束了" << std::endl; }; std::thread mytobj4(mylamthread); mytobj4.detach(); ```