【C++】线程启动、结束与创建线程写法

文章目录

  • 线程运行的开始和结束
    • 写一个自己的线程:
    • 上面看到了几行新代码,介绍一下:


线程运行的开始和结束

主线程是从main主函数开始执行的,自己创建的线程也得从一个函数(初始函数)开始执行。一旦这个函数执行完毕,那么自己创建的这个线程也就运行结束了。

写一个自己的线程:

  1. 在MyProject.cpp文件开始位置要#include一个头文件,这个头文件里包含了创建线程有关的函数声明信息:
#include<thread>
  1. 程序员创建的线程要从myprint函数开始运行,所以先完成这个函数:
//自己创建一个线程也是从函数开始运行
void myprint
{cout<<"我的线程开始执行了"<<endl;//......cout<<"我的线程执行完毕了"<<endl;return;
}
  1. 在main主函数中,加入如下代码:
std::thread mytobj(myprint);//这就是创建线程的代码,给的参数是一个函数名
mytobj.join();
cout<<"main主函数执行结束!"<<endl;

执行起来,看一看结果:

我的线程开始执行了
我的线程执行完毕了
main主函数执行结束!

有两个线程在跑,相当于这个程序的执行有两条线在同时走,所以它可以同时做两件事情,即使一条线被堵住了,另外一条线还是可以通行,这就是多线程

上面看到了几行新代码,介绍一下:

  1. thread。
std::thread mytobj(myprint);

thread是C++标准库里面的类,这个类就是用来创建线程的。里面是一个可调用对象作为thread构造函数的实参来构造这个thread对象。

  1. join。
 mytobj.join();

join成员函数的功能是:用来等待myprint函数(线程的入口函数)运行完成。一旦执行了join这行代码,主线程就阻塞到这一行,等待mytobj对象所代表的线程执行完毕,也就是等待myprint函数执行完毕。

一个书写良好的程序,应该是主线程等待子线程执行完毕后,自己才能最终退出。

  1. detach。
    主线程有义务等待所有子线程执行完毕后,自己才能最终退出。这是传统的多线程程序的写法。
    但是随着语言的发展,也看到了打破传统的一些程序写法,这就是现在要介绍的detach成员函数。翻译成中文,detach是“分离”的意思。所谓分离,就是主线程不和子线程汇合了,主线程执行主线程的,子线程执行子线程的,主线程不必等子线程运行结束,可以先执行结束,这并不影响子线程的执行。
  2. joinable。
    判断是否可以成功使用join或者detach。如果在main主函数中,只有如下这样一条代码:
thread mytobj(myprint);

那么此时此刻,joinable返回的是true:

cout<<mytobj.joinable()<<endl;//1

但是如果随后调用了join或者detach,那么joinable会变成false。
所以,joinable有一定的用处—判断针对某个线程是否调用过join或者detach

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1/7 C++

练习&#xff1a;要求在堆区连续申请5个int的大小空间用于存储5名学生的成绩&#xff0c;分别完成空间的申请、成绩的录入、升序排序、成绩输出函数&#xff0c;并在主程序中完成测试 要求使用new #include <iostream>using namespace std; double *addr_new() {double …

[文献精汇]使用PyCaret预测 Apple 股价

介绍 开发一个机器学习模型来尝试通过线性回归分析来预测 Apple 股票的价格会很有趣。PyCaret 的库&#xff0c;这是一个开源的 Python 低代码机器学习库&#xff0c;可以自动化机器学习工作流程&#xff0c;非常适合像我这样的机器学习初学者。 线性回归分析 线性回归分析用…

【51单片机】02LED流水灯实验

点亮你的LED 一、点亮第一个LED1.GPIO介绍2.P1、P2、P3端口 二、LED实验2.尝试点亮LED3.LED流水灯 一、点亮第一个LED 1.GPIO介绍 这块内容这里可以做简单的了解&#xff0c;与数电知识强相关。后续可以再回过头来学习 GPIO (general purpose input output) 通用输入输出端口…

「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用

本篇教程将实现一个打卡提醒小应用&#xff0c;通过用户输入时间进行提醒设置&#xff0c;并展示实时提醒状态&#xff0c;实现提醒设置和取消等功能。 关键词 打卡提醒状态管理定时任务输入校验UI交互 一、功能说明 打卡提醒小应用包含以下功能&#xff1a; 提醒时间输入与…

Python递归(汉诺塔问题)

递归分析 递归&#xff1a;通过自我调用来解决问题的函数 递归通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。 递归要注意&#xff1a; 1.递归出口 2.当前问题如何变成子问题 利用递归写一个阶乘函数&#xff0c;F(n)&#xff0c;求n的阶乘…

VS2022 C#创建Com组件和调用

生成一个类库项目 这里创建了一个.net 4.8的项目&#xff0c;添加了一个ComAIFaceTest类 如下图&#xff1a; ComAIFaceTest代码如下&#xff1a; [ComVisible(true)][Guid("12345678-ABCD-1234-EF00-0123456789AB")][ClassInterface(ClassInterfaceType.AutoDual)…

【GOOD】A Survey of Deep Graph Learning under Distribution Shifts

深度图学习在分布偏移下的综述&#xff1a;从图的分布外泛化到自适应 Northwestern University, USA Repository Abstract 图上的分布变化——训练和使用图机器学习模型之间的数据分布差异——在现实世界中普遍存在&#xff0c;并且通常不可避免。这些变化可能会严重恶化模…

ARM发布Armv9.5架构:迈向更强性能与灵活性的新时代

2024年11月30日&#xff0c;ARM正式发布了其最新的Armv9.5架构&#xff0c;这是Arm技术发展的又一重要里程碑。从表中信息来看&#xff0c;Armv9.5架构的发布标志着该公司的架构系列在性能、灵活性和可扩展性方面取得了进一步突破。本次发布不仅是技术上的提升&#xff0c;更是…

RAFT:随机退火森林

RAFT:随机退火森林 RAFT(Randomized Annealed Forests)是一种机器学习算法,主要用于分类和回归任务。以下是对它的介绍及原理举例说明: 一、RAFT简介 RAFT是一种基于随机森林的集成学习方法,它结合了随机森林的优点和退火算法的思想。随机森林通过构建多个决策树并综…

“AI智慧语言训练系统:让语言学习变得更简单有趣

大家好&#xff0c;我是你们的老朋友&#xff0c;一个热衷于探讨科技与教育结合的产品经理。今天&#xff0c;我想和大家聊聊一个让语言学习变得不再头疼的话题——AI智慧语言训练系统。这个系统可是我们语言学习者的福音&#xff0c;让我们一起来揭开它的神秘面纱吧&#xff0…

自动驾驶相关知识学习笔记

一、概要 因为想知道SIL、HIL是什么仿真工具&#xff0c;故而浏览了自动驾驶相关的知识。 资料来源《自动驾驶——人工智能理论与实践》胡波 林青 陈强 著&#xff1b;出版时间&#xff1a;2023年3月 二、图像的分类、分割与检测任务区别 如图所示&#xff0c;这些更高阶的…

1/7距离放假一周加1

要求在堆区连续申请5个int的大小空间用于存储5名学生的成绩&#xff0c;分别完成空间的申请、成绩的录入、升序排序、成绩输出函数以及空间释放函数&#xff0c;并在主程序中完成测试 要求使用new和delete完成 #include <iostream> #include<algorithm> using nam…

解锁编程智慧:23种设计模式案例分享

为什么要学习设计模式&#xff1f;你可以把设计模式想象成一些做饭的菜谱。当我们需要做一道菜&#xff08;开发一个功能&#xff09;时&#xff0c;如果按照自己的想法随意添加调料&#xff08;编写代码&#xff09;&#xff0c;很可能做出的菜味道不好&#xff08;功能不稳定…

UWB实操:用信号分析仪(频谱分析仪)抓取UWB频域的图像

连接好UWB设备和信号分析仪&#xff08;频谱分析仪&#xff09;&#xff0c;让UWB设备持续发送信号。我来演示如何一步一步获得下面的图像&#xff1a; 设置频率&#xff0c;FREQ&#xff0c;Center Freq 7987.2MHz 设置X轴&#xff0c;宽度&#xff0c;SPAN 2GHz设置Y轴&…

Kali系统(Debian 10.3) 遇到的问题

目录 问题一&#xff1a;非问题 kali 基础官网与安装 问题二&#xff1a; 问题三&#xff1a; Kali系统 MySQL问题Cant connect to local MySQL server through socket /run/mysqld/mysqld.sock (2) 问题四&#xff1a;重新安装MySQL 也就是MariaDB(MariaDB 含 MySQL相关…

2025最新版Visual Studio Code安装使用指南

2025最新版Visual Studio Code安装使用指南 Installation and Usage Guide for the Latest Visual Studio Code in 2024 By JacksonML 2025-1-7 1. Visual Studio Code背景 早在二十年前&#xff0c;通用的集成开发环境&#xff08;Integrated Deveopment Environment, 简称…

opencv 学习(1)

文章目录 opencv导学部分opencv的作用ffmpeg和 opencv的关系opencv的未来 计算机视觉是什么&#xff1f; opencv导学部分 opencv的作用 1 : 目标识别 人脸识别 车辆识别 2 : 自动驾驶技术 – 计算机视觉 进行车道的检测 3 : 医学图像分析 通过分析光片 来分析人到底得了什么病…

C/C++编程安全标准GJB-8114解读——初始化类

软件测试实验室在申请CMA测试认证时&#xff0c;需要根据相应的标准确定检测方法。GJB-8114是一部嵌入式软件安全测试相关的国家标准&#xff0c;本系列文章我们针对GJB-8114《C/C语言编程安全子集》的具体内容进行解读。GJB-8114标准规则中一共有124条强制性规则&#xff0c; …

Excel 做数据分析的好与不好

日常工作中&#xff0c;涉及到数据的计算分析&#xff0c;Excel 一定是使用最多的。但是也有不少小伙伴困惑于 Excel 的深入学习难度大&#xff0c;复杂问题不好做&#xff0c;相同问题重复烦&#xff0c;大数据跑不了等问题。这里我们就来聊一聊 Excel 做数据分的好与不好&…

ollama安装及本地部署开源大模型

Ollama官网&#xff1a;https://ollama.com/&#xff0c;官方网站的介绍就一句话&#xff1a;Get up and running with large language models. &#xff08;开始使用大语言模型。&#xff09; Ollama是一个开源的 LLM&#xff08;大型语言模型&#xff09;服务工具&#xff0c…