C++ 线程主动结束:join() 和 detach() 方法详解
在 C++ 中,可以使用标准库中的 std::thread 类来创建和管理线程。要主动结束一个线程,可以使用 std::thread 类的 join() 或 detach() 方法。
- 使用
join()方法:调用join()方法会阻塞当前线程,直到被调用的线程执行完毕。可以在主线程中调用被结束线程的join()方法来等待该线程执行完毕,从而实现主动结束线程的目的。
#include <iostream>
#include <thread>
void myThreadFunc() {
// 线程执行的代码
// ...
}
int main() {
std::thread myThread(myThreadFunc);
// 等待线程执行完毕
myThread.join();
std::cout << "Thread ended." << std::endl;
return 0;
}
- 使用
detach()方法:调用detach()方法会将线程与std::thread对象分离,使得线程在后台独立运行,不再与std::thread对象相关联。这样一旦线程执行完毕,其资源会被自动释放,无需手动调用join()方法。
#include <iostream>
#include <thread>
void myThreadFunc() {
// 线程执行的代码
// ...
}
int main() {
std::thread myThread(myThreadFunc);
// 分离线程
myThread.detach();
std::cout << "Thread detached." << std::endl;
return 0;
}
需要注意的是,一旦线程被分离,就无法再通过 join() 方法等待线程执行完毕,也无法再通过 detach() 方法重新将线程与 std::thread 对象关联。因此,在使用 detach() 方法时需要确保线程能够独立运行,并且不再需要与 std::thread 对象进行交互。
原文地址: http://www.cveoy.top/t/topic/fyCF 著作权归作者所有。请勿转载和采集!