C++ 的std::thread::detach有啥用?mq白cpp 立即播放 打开App,流畅又高清100+个相关视频 更多3.8万 118 7:17 App 为什么不写using namespace std?::std::是什么? 1.2万 85 11:46 App C++20屏障std::barrier 9616 96 7:15 App C++20屏障std::latch 2.2万 136 24:15 App C++std::thread-构造与...
我们将理解 std::thread::join中的第2个示例代码,record 线程的执行由 join 改为 detach。 #include<iostream>#include<thread>#include<chrono>usingnamespacestd;usingnamespacestd::chrono;voidrecord(){// simulate expensive operationstd::this_thread::sleep_for(std::chrono::seconds(1));cout<<"record ...
在声明一个std::thread对象之后,都可以使用detach和join函数来启动被调线程,区别在于两者是否阻塞主调线程。 (1)当使用join()函数时,主调线程阻塞,等待被调线程终止,然后主调线程回收被调线程资源,并继续运行; (2)当使用detach()函数时,主调线程继续运行,被调线程驻留后台运行,主调线程无法再取得该被调线程的控...
可以看出如果一个std::thread对象在析构时,其joinable()状态为 true,则会直接调用std::terminate() 去中断程序。 根据图1可知,通过有参构造函数创建了一个 std::thread对象之后,其状态时 joinable() == true的,只有当 调用 .join() 或者 . detach之后, joinable() == false。 所以如果 thread对象创建之...
std::this_thread::sleep_for(dura); 如果不想detach操作,又想等子线程结束了,主线程才退出,可以调用join方法,表示把子线程加入到主线程,看代码: std::thread th1(test); std::chrono::seconds dura(5); std::this_thread::sleep_for(dura);
2. 使用detach() detach是用来和线程对象分离的,这样线程可以独立地执行,不过这样由于没有thread对象指向该线程而失去了对它的控制,当对象析构时线程会继续在后台执行,但是当主程序退出时并不能保证线程能执行完。如果没有良好的控制机制或者这种后台线程比较重要,最好不用detach而应该使用join。
thread::join 和 thread::detach 都会让 thread 进入 unjoinable 状态,unjoinable状态下的 thread 可以安全销毁。 使用thread默认构造函数的实例是unjoinable的,使用move以后thread也会变成unjoinable。 detach之后,线程和 thread 对象将不再有任何关系,此时我们可以随意销毁thread,当然,我们也永远无法 “触碰到” 线...
std::thread tr(process,"子线程"); tr.detach(); system("pause"); } 代码中tr.detach()调用后,子线程与主线程进行分离,主线程继续执行,不会等待子线程执行,子线程在后台并行执行。此处需要注意的是在子线程分离后将无法使用std::thread::join函数等待线程执行完成。
采用 join除非您需要更大的灵活性并且愿意提供同步机制来独自等待线程完成,否则您可以使用detach ...