C++ 线程自动结束:join() 和 detach() 函数详解
在 C++ 中,可以使用 std::thread 库来创建和管理线程。要自动结束线程,可以使用 std::thread::join() 函数或 std::thread::detach() 函数。
- 使用
std::thread::join()函数:调用join()函数将等待线程执行完毕,然后继续执行主线程。如果不调用join()函数,主线程可能会在子线程还未执行完毕时结束,导致程序崩溃。示例代码如下:
#include <iostream>
#include <thread>
void threadFunction()
{
// 线程执行的代码
std::cout << '子线程执行中...' << std::endl;
}
int main()
{
std::thread myThread(threadFunction); // 创建子线程
// 其他主线程的代码
myThread.join(); // 等待子线程执行完毕
// 主线程的其他代码
std::cout << '主线程结束' << std::endl;
return 0;
}
- 使用
std::thread::detach()函数:调用detach()函数将使子线程和主线程分离,主线程不再等待子线程执行完毕。子线程将在后台继续执行,直到自己结束。示例代码如下:
#include <iostream>
#include <thread>
void threadFunction()
{
// 线程执行的代码
std::cout << '子线程执行中...' << std::endl;
}
int main()
{
std::thread myThread(threadFunction); // 创建子线程
// 其他主线程的代码
myThread.detach(); // 分离子线程,主线程不再等待
// 主线程的其他代码
std::cout << '主线程结束' << std::endl;
return 0;
}
需要注意的是,一旦线程被分离,就无法再使用 join() 函数等待线程执行完毕。所以,使用 detach() 函数时需要确保子线程能够正常结束,否则可能会导致资源泄漏或未定义行为。
原文地址: http://www.cveoy.top/t/topic/fyCC 著作权归作者所有。请勿转载和采集!