【C++】join ()和detach ()函数详解和示例

news2025/1/11 17:14:25

简单的来说,join ()方法建立的线程具有阻碍作用,该线程不结束,另一些函数就无法运行。detach ()方法建立的线程,可以和另一些函数同时进行。下面以示例进行详细说明,以帮助大家理解和使用。

目录

  • join ()
  • detach ()

join ()

join 方法用于等待线程结束。当一个线程对象调用 join 方法时,当前线程将阻塞,直到该线程对象所代表的线程结束。如果该线程对象所代表的线程已经处于结束状态,则 join 方法立即返回。注意,如果一个线程对象被析构(也就是离开其作用域),而该线程对象所代表的线程仍在运行,程序将终止。

以下是一个 join 的示例:

#include <iostream>
#include <thread>

void threadFunction() {
    std::cout << "Hello from the thread!\n";
}

int main() {
    int i = 3;
    while (i) 
    {
        std::thread t(threadFunction);  // 创建一个新线程,t 是该线程的对象
        t.join();  // 等待新线程结束
        std::cout << "Hello from the main thread!\n";
        i--;
    }
   
    return 0;
}

输出:

Hello from the thread!
Hello from the main thread!
Hello from the thread!
Hello from the main thread!
Hello from the thread!
Hello from the main thread!

在这个例子中,先建立一个while()循环,执行三次主程序中内容。程序首先创建一个新线程并开始运行 threadFunction。然后,主线程调用 t.join(),这将阻塞主线程,直到新线程结束。当新线程结束时,主线程将继续执行,输出 “Hello from the main thread!”。
在这里插入图片描述
从输出结果中可以看出,主程序输出和线程输出有着先后顺序,与原理一致。

detach ()

在C++中,std::thread::detach()函数用于将线程“分离”出当前对象。当一个线程对象调用detach()方法时,该线程对象将不再与该线程有任何关联。一旦线程分离出来,它将独立运行,直到完成。注意,一旦线程完成,系统会自动回收其资源。

下面是一个使用std::thread::detach()函数的示例:

#include <iostream>
#include <thread>

void threadFunction() {
    while (1)
    {
        std::cout << "Hello from the thread!\n";
    }
  
}

int main() {
    int i = 3;
    while (i) {
        std::thread t(threadFunction);  // 创建一个新线程,t 是该线程的对象
        t.detach();  // 将新线程分离出去,它将继续运行直到完成
        std::cout << "Hello from the main thread!\n";  // 这会立即输出,不会等待新线程结束
        i--;
    }
 
    return 0;
}

输出:

Hello from the main thread!
Hello from the main thread!
Hello from the main thread!
Hello from the thread!
Hello from the thread!
Hello from the thread!
Hello from the thread!

在这里插入图片描述

在这个例子中,也是先用一个while循环。从输出的结果可以看出,与join()的有序性不同,建立的线程和主线程是在同时进行的。

需要注意的是,一旦线程被分离出去,它就不再受原线程的控制和影响。因此,无法通过原线程来获取该线程的执行结果或等待其结束。如果需要等待线程执行完毕后再继续执行其他操作,可以使用 join() 方法来阻塞等待线程结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1208227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java —— 继承

目录 1. 为什么需要继承 2. 继承概念 3. 继承的语法 4. 父类成员访问 4.1 子类中访问父类的成员变量 1. 子类和父类不存在同名成员变量 2. 子类和父类成员变量同名 4.2 子类中访问父类的成员方法 1. 成员方法名字不同 2. 成员方法名字相同 5. super关键字 6. 子类构…

腾讯云CVM服务器5年可选2核4G和4核8G配置

腾讯云服务器网整理五年云服务器优惠活动 txyfwq.com/go/txy 配置可选2核4G和4核8G&#xff0c;公网带宽可选1M、3M或5M&#xff0c;系统盘为50G高性能云硬盘&#xff0c;标准型S5实例CPU采用主频2.5GHz的Intel Xeon Cascade Lake或者Intel Xeon Cooper Lake处理器&#xff0c;…

市场行情回暖、利好月来袭,Web3 广告业领头羊 Verasity 或迎爆发

随着区块链技术的普及和发展&#xff0c;越来越多的行业正在被区块链技术所重塑&#xff0c;例如金融、游戏行业等&#xff0c;而数字广告行业的结构和运作方式也正在被区块链技术所重塑。 众所周知&#xff0c;传统数字广告行业往往存在着信息不对称、广告欺诈、数字隐私等问题…

工具: PowerShell常用命令

ISE: 打开ISE编辑器 echo: 输出一行信息 mkdir: 创建一个文件夹 mkdir ./MyPlugin文件相关处理 参考&#xff1a; powershell新手向&#xff0c;新建、删除文件及对文件添加内容 参考文档 PowerShell入门教程 语法、环境| Powershell 教程

软件测试基础1:认识软件及测试

功能测试能力:具备对所有软件的功能进行质量验证。 1什么是软件 分类 应用软件系统软件 软件&#xff1a;控制计算机硬件工作的工具。 2软件基本组成 3软件产生过程 4什么是软件测试 软件测试&#xff1a;使用技术手段验证软件是否满足使用需求。 5软件测试目的 减少软件…

智安网络|探索语音识别技术:优势与挑战的全面解析

语音识别技术是人工智能领域的重要应用之一&#xff0c;它通过将语音信号转化为文本&#xff0c;实现了人机交互的一种新形式。随着科技的不断发展&#xff0c;语音识别技术在各个行业中得到了广泛的应用&#xff0c;但同时也存在着一些优势和劣势。 首先&#xff0c;语音识别…

中国首个通过ASIL D认证的IP发布,国产芯片供应商的机会来了

来自智能汽车的“芯”安全需求正在快速爆发。 一方面&#xff0c;随着智能汽车ADAS的快速迭代与逐渐普及化&#xff0c;以及越来越多元化智能座舱功能的快速上车&#xff0c;由此带来的车辆信息安全场景也在与日俱增&#xff0c;例如云端链接、设备身份认证、自动驾驶安全保障…

产品的生命周期

** 没错&#xff0c;产品每次版本选代都是一次重生的机会&#xff0c;每次版本迭代都不亚于一次产品上线首发。 ** 一、产品上线首发 所谓万事开头难&#xff0c;产品上线首发的重要性不言而喻&#xff0c;产品给人的第一印象非常深刻&#xff0c;后期再去扭转非常困难&#…

Java入门篇 之 继承

本篇碎碎念&#xff1a;最近的课程遇到瓶颈了&#xff0c;看的时候感觉自己会了&#xff0c;但是结束仔细一回顾还是一知半解&#xff0c;一点一点来吧&#xff0c;基础必须要打好(自己给自己好的心里暗示&#xff0c;结局一定是好的) 今日份励志文案:慢慢改变&#xff0c;慢慢…

使用JDBC连接数据库出现The server time zone value ‘�й���׼ʱ��‘ is unrecognized 的解决方案

看到网上的大佬们说是引入的依赖版本太高所以导致了时区有问题 但是我把依赖的版本改低了还是报错 用另一种办法直接在配置文件中修改url然后成功解决 spring:datasource:url: jdbc:mysql://127.0.0.1:3306/datasource?useUnicodetrue&characterEncodingutf8&useSSL…

下载文件时的文件名中文乱码问题,文件名丢失

涉及到的java代码如下&#xff0c;下载的时候文件名为中文 package com.example.springboot.service.impl;import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringU…

metinfo 6.0.0 任意文件读取漏洞复现

metinfo 6.0.0 任意文件读取漏洞复现 漏洞环境 环境为mrtinfo 6.0.0 漏洞存在的位置 通过代码审计发现在源代码的/app/system/include/module/old_thumb.class.php这个位置有着任意读取文件漏洞 漏洞点:http://127.0.0.1/metinfo_6.0.0//include/thumb.php 漏洞复现 访…

如何在微信内置浏览器内抓包

文章目录 使用环境&工具使用步骤1、手机USB连接上电脑&#xff0c;打开USB调试2、解压adb工具的压缩包&#xff0c;使用该工具连接上手机3、开启微信抓包4、电脑上打开chrome内核的浏览器或edge浏览器 使用环境&工具 windows电脑 安卓手机 adb工具 USB数据线 使用步骤…

2023.11.14使用bootstrap制作一个简洁的前端注册登录页

2023.11.14使用bootstrap制作一个简洁的前端注册登录页 比较简洁的登录页&#xff0c;主要是为自己开发的一些平台页面做测试用&#xff0c;前端具备功能如下&#xff1a; &#xff08;1&#xff09;输入用户名、密码&#xff0c;需补充后端验证代码。 &#xff08;2&#xff…

Python语言:文件的操作与使用

Python语言可以对电脑中的文件进行一系列操作&#xff0c;包括文件的打开与关闭&#xff0c;文件内容的读取和追加等。 打开文件 语法&#xff1a;使用open函数 使用python语言的内置open函数打开一个文件&#xff0c;里面有三个参数可以指定文件的路径&#xff0c;操作方式&a…

抖音电商的野心,中小商家的风口

文丨新熔财经 作者丨寒蝉鸣 反向消费的大浪潮&#xff0c;不会辜负任何一个抓住风口的平台。过去是拼多多&#xff0c;如今是唯品会。 靠着响应新时代消费者对“质价比”的需求&#xff0c;消失在大众视线许久的唯品会&#xff0c;不仅守住了电商老前辈的行业地位&#xff0…

Gempy 实现地理位置3D模型的展示以及导出

1. 首先安装python gempy 包 pip install gempy python 版本 3.10 这个很重要,版本不同可能会报错 2. gdal 可能会报错, 一下地址根据python版本下载,然后移入到python解释器环境中, Script文件中,然后cmd ,pip install 文件名安装即可 Releases cgohlke/geospatial-wheels …

元数据管理,数字化时代企业的基础建设

随着新一代信息化、数字化技术的应用&#xff0c;众多领域通过科技革命和产业革命实现了深度化的数字改造&#xff0c;进入到以数据为核心驱动力的&#xff0c;全新的数据处理时代&#xff0c;并通过业务系统、商业智能BI等数字化技术和应用实现了数据价值&#xff0c;从数字经…

Failed to restart network.service: Unit network.service not found.

执行systemctl restart network命令&#xff0c;报错Failed to restart network.service: Unit network.service not found. 执行 yum install network-scripts命令 再次执行&#xff0c;正常

每日一练:Python中实现将阳历转换为农历

农历是中国传统的农业历法&#xff0c;与阳历&#xff08;公历&#xff09;有所不同。在Python中&#xff0c;我们可以使用第三方库 lunardate 来实现阳历到农历的转换。以下是一个简单的示例&#xff0c;演示如何在Python中执行这个转换过程。 1.安装 lunardate 库 首先&…