在 C++ 中,可以使用 std::thread 库来创建和管理线程。要自动结束线程,可以使用 std::thread::join() 函数或 std::thread::detach() 函数。

  1. 使用 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;
}
  1. 使用 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() 函数时需要确保子线程能够正常结束,否则可能会导致资源泄漏或未定义行为。

C++ 线程自动结束:join() 和 detach() 函数详解

原文地址: http://www.cveoy.top/t/topic/fyCC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录